2012-04-23 6 views
0

Я хочу скопировать UUID объекта, сгенерированный во время выполнения в другое поле. идентификатор объекта генерируется с помощью кода описано ниже:Копировать идентификатор объекта в постоянное время

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?

ответ

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

Это решение возможно, но в случае наследования объектов из MyEntity мне могут потребоваться разные значения idCopy (например, установка idCopy с идентификатором корневого родителя). Возможно ли использовать @PrePersist? Обеспечивает ли Eclipse Link существование UUID до настойчивости? – user1062078

+0

Вы всегда можете переопределить 'setId()' в классах потомков, чтобы вести себя по-другому. Я не уверен в '@ PrePersist', но это должно быть достаточно легко, чтобы протестировать поведение самостоятельно. –

Смежные вопросы