繁体   English   中英

"“列 'id' 不允许 NULL”,即使日志说它具有值绑定"

[英]"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”。

  1. 您希望在使用序列“systemuser_pk_seq”在实体中进行注释时自动填写它 - 您是否在数据库中获得了此序列?
  2. 同样,你想用值“-1”直接填写它 - 在ID列中你不能使用负数。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM