2016-11-16 74 views
2

对于实体的生成ID,应用程序使用触发器。因此,对于给实体分配产生的值,我们使用的结构是这样的:在Hibernate实体中复合@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不支持多个自然ID。我们怎样才能摆脱这种情况?

回答

0

作为这种情况的可用解决方案,我们更改了一些获取实体ID的机制。除了使用

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

它不requre @NaturalId,它解决了我们的问题。