2016-06-13 8 views
0

ここでは、データがmysql dbにとどまった後に自動生成IDを取得しようとしました。mysqlDBに永続化した後に自動生成されたIdを取得する方法JPAを使用

DTOクラス

public class TradeTransaction { 

    private long tradetransactionid ; 
    private long borrowerid ; 
    private String operationalcountry ; 
    private String productcategory ; 
    private String producttype ; 
    private boolean ishazardous; 
    private boolean specialisedHandle; 
    private String currency; 
    private double transactionvalue; 
    private String suppliercountry; 

    @Id 
    @Column 
    public long getTradetransactionid() { 
     return tradetransactionid; 
    } 
    @Column 
    public long getBorrowerid() { 
     return borrowerid; 
    } 

ビジネスロジッククラスは、データベースに永続化します。

 EntityManager v_objEm; 
     EntityTransaction v_objTran; 
     TradeTransaction v_ObjectToPersist; 
     v_ObjectToPersist = new TradeTransaction(); 

     v_ObjectToPersist.setBorrowerid(25); 
     v_ObjectToPersist.setOperationalcountry("India"); 
     v_ObjectToPersist.setProductcategory("electornics"); 
     v_ObjectToPersist.setProducttype("E9088")); 
     v_ObjectToPersist.setIshazardous(true); 
     v_ObjectToPersist.setSpecialisedHandle(true); 
     v_ObjectToPersist.setCurrency("usd"); 
     v_ObjectToPersist.setTransactionvalue(2000.3); 
     v_ObjectToPersist.setSuppliercountry("african-based"); 
     v_objEm = MyCustomClass.getEntityManager(); 
     v_objTran = v_objEm.getTransaction(); 
     v_objTran.begin(); 

     v_objEm.persist(v_ObjectToPersist); 
     System.out.println(v_ObjectToPersist.getTradetransactionid()); //Transaction ID print as Zero. 
     v_objTran.commit(); 
     System.out.println(v_ObjectToPersist.getTradetransactionid()); //Transaction ID print as Zero Here Too. 

     //v_objEm.refresh(v_ObjectToPersist); //not Working throwing Exception. 
     v_objEm.close(); 

私はデータベースに永続化されObjectからID生成自動車を取得するためにコードの異なる味を試してみました。成功しなかった。

注: - このコードは正常に動作し、データをdb(エラーなし)に保存しています。しかし、自動生成されたID(これはprimary keyが複数の参照をテーブルに持つ)を取得できません。私はこれまで

  1. jpa-returning-an-auto-generated-id-after-persist

  2. how-to-get-id-of-last-persisted-entity-using-jpa

  3. how-to-get-the-primary-key-of-any-jpa-entity

私を助けてください..任意のヘルプにappriciatedされます。..

を試してみました リンク

ありがとうございました。

答えて

2

これは長時間ですが、とにかくお勧めします。

フィールドprivate long tradetransactionid;はプリミティブ型であると宣言しました。つまり、NULLを許可せず、インスタンス化時に暗黙的に0になります。データベース内のオブジェクトを永続化すると、IDが0のアイテム/オブジェクトを挿入しようとします。 参照型であるprivate Long tradetransactionid;を試すことができます。この方法では、最初はnullで、自動生成によって設定することができます。

+0

として、あなたの主キーをマークする必要がIDを生成しました。データはデータベースに保持されます。質問を慎重に読んでください。私はメモとして言及していただきありがとうございます –

+0

私はデータが保持できることを理解しています。しかし、おそらくデータベース内のIDは自動生成され、0で上書きされることはありません。これは、すでに設定されている場合、JPAがJavaオブジェクトのid値をオーバーライドすることを意味しません。 –

0
entityManager.persist(model); 
model.getTradetransactionid(); 

AUTO_INCREMENTあなたが

@GeneratedValue(strategy=GenerationType.IDENTITY) 

としてあなたPKフィールドをマークする必要があり、あなたがいないのMySQLを使用するには...

entityManager.flush(); 
+0

答えを編集して完全なコードを書いてください。私はすでにあなたが示唆した方法で試してみましたが、IDを取得するのに成功することはできないからです。ありがとう@JasonChrist –

1

を試してみてください。そのJPAなしでidはMySQLの自動を使用するには、データストアに

0

が割り当てられていることを知ることができません。その私には細かい作業

@GeneratedValue(strategy=GenerationType.AUTO) 
関連する問題