2017-09-15 91 views
1

我正在使用spring jpa存儲庫和hibernate一起將實體保存到我的oracle數據庫。如何使用Spring-Hibernate獲得我的oracle數據庫序列的下一個值?從春季休眠序列中獲取下一個值

這是我的事件類:

@Entity 
public class Event { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    private Long seriesId; 

    private String description; 

    public Event() { 
    } 

    public Long getId() { 
    return id; 
    } 

    public void setId(Long id) { 
    this.id = id; 
    } 

    public Long getSeriesId() { 
    return seriesId; 
    } 

    public void setSeriesId(Long seriesId) { 
    this.seriesId = seriesId; 
    } 

    public String getDescription() { 
    return description; 
    } 

    public void setDescription(String description) { 
    this.description = description; 
    } 
} 

我需要序列的下一個值一次事件解析器的所有系列活動。

public class EventResolver { 

    @Autowired 
    private EventRepository eventRepository; 

    public void createSeriesOfEvents(List<EventAPI> eventsToCreate){ 

     Long seriesId = null; // TODO: Get the series id from database sequence 

     for (EventAPI currEvent : eventsToCreate){ 
      Event newEvent = new Event(); 
      newEvent.setDescription(currEvent.description); 
      newEvent.setSeriesId(seriesId); 
      eventRepository.save(newEvent); 
     } 

    } 
} 

感謝任何形式的幫助..

+0

爲什麼?將正確的註釋應用到'@ ID'字段,Hibernate將爲你做這一切。例如,請參閱:https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Sequence_objects http://tech.zooplus.com/sequences-in-hibernate/ –

+0

我希望整個系列(系列)具有相同的值可以是4-5個事件),所以當我創建'Event'實體時不能生成它。我必須在'createSeriesOfEvents'方法 –

回答

1

最後我以Spring的方式解決了我的問題,您只需要在JpaRepository中添加一個本地查詢,如下所示:

public interface EventRepository extends JpaRepository<Event, Long> { 

@Query(value = "SELECT seq_name.nextval FROM dual", nativeQuery = 
     true) 
Long getNextSeriesId(); 
1

您可以使用JPA這種方法:

Query q = em.createNativeQuery("select seq_name.nextval from dual"); 
return (Long)q.getSingleResult(); 
+0

中從我可以獲取'em'對象的地方執行它? –

+0

'em'表示EntityManager,你可以自動裝配它 – StanislavL

0

標註您的ID屬性,像這樣:

@Id 
@GeneratedValue(generator = "idSequence") 
@SequenceGenerator(schema = "MYORASCHEMA", name = "idSequence", sequenceName = "MY_ORACLE_SEQ_NAME", allocationSize = 1) 
@Column(name="ID") 
private Long id; 
+0

我不希望每個對象都會得到他自己的ID,我想給所有系列(4-5個事件類型的對象)提供相同的系列ID –

+0

你有沒有父系表的系列? – slambeth

+0

不,我只是想要創建一系列事件的選項 - 這意味着少數事件具有相同的系列ID但不同的ID –