0
実行時に生成されたエンティティのUUIDを別のフィールドにコピーしたいとします。 エンティティIDは、コードを介して生成される蛇腹説明:持続時間でエンティティIDをコピー
package eclipselink.example;
public class UUIDSequence extends Sequence implements SessionCustomizer {
public UUIDSequence() {
super();
}
public UUIDSequence(String name) {
super(name);
}
@Override
public Object getGeneratedValue(Accessor accessor,
AbstractSession writeSession, String seqName) {
return UUID.randomUUID().toString().toUpperCase();
}
...
public void customize(Session session) throws Exception {
UUIDSequence sequence = new UUIDSequence("system-uuid");
session.getLogin().addSequence(sequence);
}
}
Persitence.xml:
property name="eclipselink.session.customizer" value="eclipselink.example.UUIDSequence"
エンティティ:
public abstract class MyEntity{
private String id;
private String idCopy;
@Id
@Basic(optional = false)
@GeneratedValue(generator="system-uuid")
@XmlElement(name = "ID")
public String getId() {
return id;
}
}
どのようにJPA(Eclipseのリンク)を指示することができるが実行時に生成されたUUIDをidCopy
フィールドにコピーしますか?
が、 MyEntityからのエンティティの継承の場合、別のidCopy値が必要な場合があります(たとえば、idCopyをルート親のidで設定するなど)。代わりに@PrePersistを使用することは可能ですか? Eclipse Linkは永続性の前にUUIDの存在を保証していますか? – user1062078
子孫クラスの 'setId()'をいつでもオーバーライドして、異なる動作をさせることができます。 @PrePersistについてはわかりませんが、動作を自分でテストするのは簡単なはずです。 –