gpt4 book ai didi

java - 数据完整性违规异常 : not-null property references a null or transient value

转载 作者:行者123 更新时间:2023-12-01 13:44:56 24 4
gpt4 key购买 nike

由于某种原因,我的数据库中的几条记录出现了此异常(当总数 > 30K 时,<10)。
我几乎可以肯定这不是由空值引起的。
所以我的问题是:“除了空值之外,还有其他原因导致此异常吗”?

这是我的代码:

@Entity  
@Table(name = "a")
@SequenceGenerator(name = "a_sequence", sequenceName = "a_sequence", allocationSize = 1)
public class A implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "a_sequence")
private Long id;

@NotNull
@ManyToOne
@JoinColumn(name = "b")
private B fieldB;
}

@Entity
@Table(name = "b")
@SequenceGenerator(name = "b_sequence", sequenceName = "b_sequence", allocationSize = 1)
public class B implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "b_sequence")
private Long id;

@Column(name = "message")
private String message;
}

这是我的堆栈跟踪:

Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: ***.***.domain.A.fieldB
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:100)
at org.hibernate.event.def.DefaultFlushEntityEventListener.scheduleUpdate(DefaultFlushEntityEventListener.java:309)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:155)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:512)

更新:导致错误的代码

A a = getManager().find(A.class, id);  
dozerBeanMapper.map(anotherAobject, a);
getManager().merge(a);

很可能在第二行,对象 a 的 fieldB 变为 null,但根据我的日志,这不是真的,因为对象 anotherAobject 中的 fieldB 不为 null。问题是我无法在 Debug模式下连接到我的应用程序。我添加了更多日志,以便可以提供一些信息。但如果我是对的,并且从 anotherAobject 映射到 fieldB 后不为 null,那么什么会导致此异常?

更新:

问题是由空值引起的。问题已结束。

最佳答案

它必须涉及空值,但不一定在数据库本身中。例如,如果您尝试创建 A 的新实例而不对其调用 setFieldB(),然后尝试保留该 A<,则可能会发生这种情况 实体。

关于java - 数据完整性违规异常 : not-null property references a null or transient value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20428808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com