2017-09-15 15 views
1

私はoriberデータベースにentiteを保存するために休止状態でspring jpaリポジトリを使用しています。 Spring-Hibernateを使用してOracleデータベース・シーケンスの次の価値をどのように得ることができますか?春の休止状態でシーケンスから次の値を取得

これは私のEventクラスである:

@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; 
    } 
} 

私はイベントリゾルバ内のすべてのイベントのシリーズのために一度シーケンスの次の値を取得する必要があります。あなたはJPAで、このアプローチを使用することができます

+0

なぜですか?正しい注釈を '@ID'フィールドに適用すると、Hibernateはこれをすべて行います。例:https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Sequence_objects http://tech.zooplus.com/sequences-in-hibernate/ –

+0

シリーズ全体で同じ値が必要です私は '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

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); 
     } 

    } 
} 

ヘルプのいずれかの種類をありがとう..:

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が異なるイベントはほとんどありません –

関連する問題