0

実行時に生成されたエンティティのUUIDを別のフィールドにコピーしたいと思います。エンティティ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;
    }
}

idCopy実行時に生成されたUUIDをフィールドにもコピーするようにJPA(Eclipse-link)に指示するにはどうすればよいですか?

4

1 に答える 1

0

これが機能するかどうかは100%わかりませんが(EclipseLinkがセッターを呼び出すのか、フィールドを直接割り当てるのかはわかりません)、試してみてください。

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;
    }

    public void setId(String id) {
        this.id = id;
        this.idCopy = id;
        // or
        // this.setIdCopy(id);
    }
}
于 2012-04-23T15:17:07.280 に答える