2016-11-16 2 views
2

Для генерации идентификаторов сущностей приложение использует триггер. Таким образом, для присвоения сгенерированных значений к объектам мы используем конструкции, как это:Composite @NaturalId в объекте спящего режима

@Id 
@Column(name = "INVOICE_ID") 
@GeneratedValue(generator = "trigger") 
@GenericGenerator(name = "trigger", strategy = "org.hibernate.id.SelectGenerator") 
private Long invoiceId; 

@Column(name = "INVOICE_AMOUNT") 
@NaturalId(mutable = true) 
private Double invoiceAmount; 

SelectorGenerator требует использовать @NaturalId для некоторого поля, который должен есть (логически) уникальное значение. Но в некоторых таблицах нет ни одного поля, которое имеет все уникальные значения. SelectGenerator не поддерживает несколько физических идентификаторов. Как мы можем обойти эту ситуацию?

ответ

0

В качестве доступного решения для таких случаев мы изменили небольшой механизм получения идентификаторов сущностей. Вместо того чтобы использовать

@GenericGenerator(name = "trigger", strategy ="org.hibernate.id.SelectGenerator")

мы предпочли использовать генератор последовательности базы данных

@Id 
@Column(name = "INVOICE_ID") 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "invoice_id_seq") 
@SequenceGenerator(name = "invoice_id_seq", sequenceName = "INVOICE_ID_SEQ") 
private Long invoiceId; 

Это не @NaturalId и требуют установки его решить нашу проблему.

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