генерировать значение в переопределенном атрибуте - PullRequest
0 голосов
/ 12 марта 2012

У меня есть класс для ID

@org.hibernate.annotations.AccessType("property")
public class ObjectID implements java.io.Serializable
{   
private long value;  

    long getValue()
    {
       return value;
    }

    void setValue(Long id)
    {
       value = id != null ? id : 0L;
    }
  // equals, hash, contructor  
}  

И сопоставили класс (Пациент), который использовал этот ID-класс. Я хочу сгенерировать длинное значение в классе ObjectID. помоги мне.
Я пытался

public class Patient implements Serializable 
{
   @javax.persistence.Id
   @javax.persistence.Column(name = "aa_id")
   @org.hibernate.annotations.Formula("case when aa_id is null then patient_seq.nextval else aa_id end")
   @javax.persistence.AttributeOverride(name = "value", column = @Column(name = "aa_id"))
   private ObjectID id;
}

и

public class Patient implements Serializable 
{
   @javax.persistence.Id
   @javax.persistence.SequenceGenerator(name = "PatientSequenceGenerator",
                       sequenceName = "patient_seq")
   @javax.persistence.GeneratedValue(strategy = GenerationType.SEQUENCE,
                    generator = "PatientSequenceGenerator")
   @javax.persistence.AttributeOverride(name = "value", column = @Column(name = "aa_id"))
   private ObjectID id;
}

но там не полезно

Одним из способов разрешения этой ситуации является написание пользовательского userType для ObjectID и создание собственного ID-генератора.

1 Ответ

0 голосов
/ 12 марта 2012

составные идентификаторы обычно назначаются программой, и я не знаю, существует ли вообще возможность установить его (или его части) с помощью последовательности базы данных из коробки.

сначала вы можете попробовать установить его таким образом, чтобы увидеть, работает ли он:

public class Patient implements Serializable 
{
   @Id
   @SequenceGenerator(name = "PatientSequenceGenerator", sequenceName = "lab_patient_seq")
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PatientSequenceGenerator")
   private Long id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...