私はこれがうまくいくとは思わない。 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
を投げるなどしてチェックする必要があります。
「長い」フィールドを「設定しない」方法を説明してください。それが長いなら、私はおそらく理解できるかもしれないが、長くはない。 –