在Hibernate实体中复合@NaturalId

时间:2016-11-16 07:53:28

标签: java database hibernate triggers naturalid

对于实体的生成ID,应用程序使用触发器。因此,为了将生成的值分配给实体,我们使用如下构造:

@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。我们怎样才能解决这种情况?

1 个答案:

答案 0 :(得分: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;

它没有要求@NaturalId,它解决了我们的问题。