[英]"NULL not allowed for column 'id'" even though log says it had value bound
所以,我已经为此苦恼了好几个小时!
我一直在用很多不同的设置对此进行测试..
最重要的是,当我在 JBoss 中启动我的 EAR 时,我能够与 Persistence-Jar 进行交互,并且所有 @Entities 都没有问题。 不同之处在于在 JBoss 中运行它使用了不同的 persistence.xml(maven 主\/测试目录结构),它通过 JTA 连接连接到 PostgreSQL 服务器。
只有当我在 maven 和 JUnit 中运行测试时,它们才会失败。
我一直在尝试在 PostgreSQL 模式下使用 H2 数据库(但我也将它作为数据库连接服务器运行但没有成功)
处理我的 Systemuser-entity id-value 似乎失败了
这是我的 Systemuser 类的顶部:
@Entity
@Table(name = "systemuser")
public class SystemUser extends BaseOldStyleEntity implements Serializable {
private static final long serialVersionUID = -1L;
@Id
@SequenceGenerator(name = "SYSTEMUSER_SYSTEMUSERIDNR_GENERATOR", sequenceName = "systemuser_pk_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SYSTEMUSER_SYSTEMUSERIDNR_GENERATOR")
@Column(name = "systemuseridnr", unique = true, nullable = false)
@BusinessKey
private Integer id;
...
它出现了另一种可能的解决方案,用于创建正确的CREATE TABLE语句。
http://mrbool.com/how-to-create-database-table-using-hibernate/28269
最棒的是:
<property name="hbmdl.auto">update</property>
使用此解决方案,您的代码将自己生成一个语句。 试试吧!
问题原来是带有@UniqueConstraint的@Entity,有人在提交代码之前错过了完成。
事实证明,在测试阶段通过Hibernate和EclipseLink生成H2和postgres表时,这给了我们很多不同的行为和错误!
我们终于通过Eclipse远程调试maven surefire插件来解决这个问题。
@Entity
@Table(name = "dyn_bin_constraint_group", schema = "public",
uniqueConstraints = { @UniqueConstraint(columnNames = {}) })
public class BinConstraintGroup implements Serializable {
解决方案就是完成@UniqueConstraint!
@Entity
@Table(name = "dyn_bin_constraint_group", schema = "public",
uniqueConstraints = { @UniqueConstraint(columnNames = {BinConstraintGroup.NAME}) })
public class BinConstraintGroup implements Serializable {
您的ID列是“systemuseridnr”。
将dialect
更改为org.hibernate.dialect.PostgreSQLDialect
解决了这个问题。 这是从 h2database 推荐的
使用这样的兼容模式时,对应数据库使用Hibernate方言,而不是H2Dialect; 但请注意 H2 并不支持所有数据库的所有功能。
https://h2database.com/html/tutorial.html?highlight=dialect&search=dialect#using_hibernate
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.