我有一个'客户'我的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的所有者;
请给我一些提示吗?
感谢。
答案 0 :(得分:2)
好的这是解决方案:
为了允许此字段的数据库默认值(这是序列cus_number_seq的nextval),JPA必须在持久化事务时不引用cus_number值。为此,只需注释@Column(name =“cus_number”,insertable = false) 这样,在插入新客户时不会提及该字段,因此默认值nextval序列使用DB端。
现在工作正常。 谢谢你的提示。
答案 1 :(得分:0)
@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]。只允许一个。
感谢。