2016-11-15 18 views
0

私のエンティティにはidというフィールドがあり、@Id(手動で設定した)という注釈が付けられていて、私が知りたいと知っていることを知っています。 GeneratedValue)でも、IDを手動で設定する必要があります。設定しない場合は、それを自動生成する必要があります。JPA @GeneratedValueと@Id

例:私はあなたが私を理解することを願ってエンティティ

new Entity(someid) //Once with ID and no generated value 
new Entity() //Second without ID and generated unique value 

@Id 
@GeneratedValue 
private long id; 

作成。

+1

「長い」フィールドを「設定しない」方法を説明してください。それが長いなら、私はおそらく理解できるかもしれないが、長くはない。 –

答えて

2

私はこれがうまくいくとは思わない。 JPAはid値を自動的に生成し、@GeneratedValueを担当します。 id 100を持つ既存のエンティティがすでに存在する場合はどうなるでしょうか?そして、100%のIDを持つ新しいエンティティを手動で作成します。直感的には、私はJPA(または実装)がexpectionをスローすると言います。

私がすべてでは試したことのない独自の発電機を(書くのアイデアを得た上で答えを書いている間は、ちょうどstackoverflowの時にここにダウンコード化された。

あなたは@GeneratedValue注釈

にジェネレータの独自の実装を渡すことができます
@Id 
@GeneratedValue(startegy = GenerationType.IDENTITY, generator="generatedIdOrCustomId") 
@GenericGenerator(name="generatedIdOrCustomId", strategy="GeneratedIdOrCustomId") 
private Long id; 
... 

とカスタム実装は次のようになります。

public class GeneratedIdOrCustomId extends IdentityGenerator { 

@Override 
public Serializable generate(SessionImplementor session, Object obj) throws HibernateException { 
    if (((YourEntity) obj).getId() == null) { 
     // the id is null, let JPA create an id. 
     return super.generate(session, obj); 
    } else { 
     // the id is set and should not be generated by JPA. 
     return ((YourEntity) obj).getId(); 
    } 
} 

生成メートルをエトドはすばやく汚れた実装です。この場合にはとし、(Hibernate)Exceptionを投げるなどしてチェックする必要があります。

+0

さて、問題があるでしょう。ありがとう。 –

関連する問題