0

Postgres DB で eclipselink を使用して JPA 2.0 を使用しています。

新しいエンティティ クラスを作成したい。主キーは Integer であり、null 制約はありません。

私が挿入するとき、JPAは新しい主キーの値を知りません。

新しい主キーの値を取得するにはどうすればよいですか?

DBスキームを変更できません。

最大IDを取得して、より大きなIDをDBに挿入することを考えていますが、それは面倒な解決策です。

これは、netBeans 7.0.1 で生成されたエンティティ クラスの主キーの定義です。 @Id @Basic(optional = false) @Column(name = "obj_id") private Integer ObjId;

    public void save(){
    TkTopoVerzio test= new TkTest();
    // set all the value
    // ....

    try {
            em.getTransaction().begin();
            em.persist(test);
            em.getTransaction().commit();  

     } catch(javax.persistence.NoResultException ex){
        //Todo : manage exception
     } catch (Exception ex){
         // toDO : manage exception 
     }

}

4

1 に答える 1

0

これが既存のアプリである場合、主キーはどのように割り当てられますか?
もちろん、persist を呼び出す前に新しいオブジェクトに pk を直接割り当てることもできますが、EclipseLink ではカスタム pk ジェネレーターも使用できます : http://wiki.eclipse.org/EclipseLink/Examples/JPA/CustomSequencingどんな戦略も必要です。

あなたが提案していることの問題( max を使用して既存の値を見つける)は、これがスレッドまたはマルチアプリでさえ安全であることが非常に難しいことです。高度に同時実行または分散されたアプリでは、pk の再利用で問題が発生する可能性があります。データベース指向の pk 生成戦略を使用できない場合は、UUID の方が適している可能性があります。良いリソースはここにあります: http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Advanced_Sequencing

于 2012-07-24T13:51:03.223 に答える