【问题标题】:Copy Entity ID at persist time在持久化时复制实体 ID
【发布时间】:2012-04-23 15:12:52
【问题描述】:

我想将运行时生成的实体 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;
    }
}

如何指示 JPA(Eclipse 链接)将运行时生成的 UUID 也复制到 idCopy 字段?

【问题讨论】:

    标签: jpa entity jpa-2.0 eclipselink


    【解决方案1】:

    我不是 100% 确定这会起作用(我不知道 EclipseLink 是调用 setter 还是直接分配字段),但试试看:

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

    【讨论】:

    • 这个解决方案是可能的,但是如果实体从 MyEntity 继承,我可能需要不同的 idCopy 值(例如,使用根父级的 id 设置 idCopy)。是否可以改用@PrePersist? Eclipse Link 是否保证 UUID 在持久化之前存在?
    • 您始终可以在后代类中覆盖 setId() 以实现不同的行为。我不确定@PrePersist,但应该很容易自己测试行为。
    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2013-11-06
    相关资源
    最近更新 更多