我试图在定义为(在Postgresql中)的表中使用spring-jpa插入一个值
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, ...);
如果我从insert语句中删除id列,那么我的auto_increment会起作用。否则它没有。
如何控制JPA以便忽略插入中的id?
答案 0 :(得分:0)
尝试更改ID生成策略
@Entity
@Table(name = "T_PERSISTENT_AUDIT_EVENT")
@SequenceGenerator(
name="PersistentAuditEventGenerator",
sequenceName="PAE_SEQUENCE"
)
public class PersistentAuditEvent {
@Id
@GeneratedValue(generator="PersistentAuditEventGenerator")
@Column(name = "id")
private Long id;
//...
}
PostgreSQL不支持IDENTITY列。
答案 1 :(得分:0)
我没有得到Spring Security与之相关的信息。无论如何,以我的经验,我不在数据库中使用AUTO_INCREMENT,所以我将其删除了。并且不要使用策略IDENTITY来生成ID,请将其设置为默认值,然后Hibernate将负责管理ID的顺序。
@Entity
@Table(name = "T_PERSISTENT_AUDIT_EVENT")
public class PersistentAuditEvent {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
//...
}