Java/Hibernate:非空属性引用空值或瞬态值
为了简单起见,事件具有地址,许多事件可以共享相同的地址。所以我有一个ManyToOne关系。Java/Hibernate:非空属性引用空值或瞬态值
活动类(我删除了可读性不相关的代码)
@Entity @Table(name = "events")
public class Event {
private Address address;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "address_id", nullable = false)
public Address getAddress() {
return this.address;
}
}
地址类
@Entity @Table(name = "adresses")
public class Address {
private Set<Event> events = new HashSet<Event>(0);
@OneToMany(cascade = CascadeType.ALL, mappedBy = "address")
public Set<Event> getEvents() {
return this.events;
}
}
当我取ID为6的事件,并尝试将其删除:
Event e = session.get(Event.class, 6); session.delete(e);
我得到的错误not-null property references a null or transient value : logic.Event.address
但由于地址不初始化它既不瞬态因为我从数据库中检索它,也没有空:
Event e = session.get(Event.class, 6); System.out.println(e.getAddress().getAddressId()); //Output is 3, which is correct
我不知道为什么发生这种情况,大多数人同样的问题试图保存一个暂时的对象,这根本不是我的情况。
回答:
拆卸cascade
注解我所有的@ManyToOne
侧实体解决我的问题。如果有人有解释,请随时评论!
以上是 Java/Hibernate:非空属性引用空值或瞬态值 的全部内容, 来源链接: utcz.com/qa/258596.html