【发布时间】:2015-03-28 04:13:53
【问题描述】:
我正在尝试使用 spring-jpa 在定义为(在 Postgresql 中)的表中插入一个值
CREATE TABLE T_PERSISTENT_AUDIT_EVENT
(id BIGINT AUTO_INCREMENT NOT NULL,
principal VARCHAR(255) NOT NULL,
event_date TIMESTAMP,
event_type VARCHAR(255),
CONSTRAINT PK_T_PERSISTENT_AUDIT_EVENT PRIMARY KEY (id));
实体定义为:
@Entity
@Table(name = "T_PERSISTENT_AUDIT_EVENT")
public class PersistentAuditEvent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
//...
}
当我的查询被执行时(Spring Security 正在执行它),我得到一个异常,说我试图在表中插入一个空值,违反了非空约束。
查询生成如下:
insert into ... (id, ...) values (null, ...);
如果我从插入语句中删除 id 列,那么我的 auto_increment 将起作用。否则不会。
如何控制 JPA 以使其在插入时忽略我的 id?
【问题讨论】:
-
我不确定
IDENTITY是如何工作的,但是对于 PostgreSQL,您应该使用GenerationType.SEQUENCE或GenerationType.AUTO来获得类似AUTO_INCREMENT的功能。 BTWAUTO_INCREMENT在 PostgreSQL 的纯 SQL 中无效,使用伪类型serial,或者使用序列。
标签: postgresql hibernate jpa jhipster