如何在JPA中使用Postgres序列?

时间:2015-04-03 18:10:40

标签: postgresql jpa

我有一个'客户'我的postgresql数据库中的表,其中包含一个特定字段:cus_number,其中定义了一个序列。此字段不是主键,已经是cus_id字段。

cus_number的默认值是

nextval('customer_cus_number_seq'::regclass) it's the sequence.

使用pgadmin,当我在此customer表中插入一行,其值为cus_number时,它工作正常,并使用默认值序列。 但是在我的webap中,当我持久保存一个新的Customer()时,插入的行在字段cus_number中没有任何内容。

这是我的自定义实体定义:

public class Customer implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "pers_id")
private Integer id;

...

@Column(name = "cus_number")
private Integer number;

...

}

序列脚本:

  CREATE SEQUENCE customer_cus_number_seq
  INCREMENT 1
  MINVALUE 100
  MAXVALUE 9223372036854775807
  START 114
  CACHE 1;

ALTER TABLE customer_cus_number_seq   拥有fizzconsulting的所有者;

请给我一些提示吗?

感谢。

2 个答案:

答案 0 :(得分:2)

好的这是解决方案:

为了允许此字段的数据库默认值(这是序列cus_number_seq的nextval),JPA必须在持久化事务时不引用cus_number值。为此,只需注释@Column(name =“cus_number”,insertable = false) 这样,在插入新客户时不会提及该字段,因此默认值nextval序列使用DB端。

现在工作正常。 谢谢你的提示。

答案 1 :(得分:0)

@Tiny,接下来是正确的定义吗?

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@SequenceGenerator(name = "customerNumberSequence", sequenceName = "customer_cus_number_seq", allocationSize = 1, initialValue = 100)
@Basic(optional = false)
@Column(name = "pers_id")                                                                       
private Integer id;
...
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "customerNumberSequence")
@Column(name = "cus_number")
private Integer number;
...

JPA似乎不接受这个声明: 异常描述:类[class tfe.entity.Customer]有两个@GeneratedValues:用于字段[customer.cus_number]和[customer.pers_id]。只允许一个。

感谢。