JavaHibernate不更新或删除,但插入
我正在处理一个现有的数据库,并创建了Hibernate实体。有问题的实体是OrderHeader
,它有一个OrderLine
列表。以下是我的映射:
@Entity
@Table(name = "orderline")
public class OrderLine implements Serializable {
@Id
@Column(name = "OrderLineID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer orderLineID;
@ManyToOne
@NotNull
OrderHeader orderHeader;
}
...
@Entity
@Table(name = "orderheader")
public class OrderHeader implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "OrderHeaderID")
int orderHeaderId;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
List<OrderLine> orderLineList;
}
在分离的实体上执行所有操作。当我使用session.save
插入一个带有OrderLine
列表的新OrderHeader
时,所有操作都会完美执行。但是,在对分离的、更改的OrderHeader
调用session.update
时,执行的唯一SQL语句是检索更新结果的select语句(这在一开始就没有发生)。当我试图删除OrderHeader
时,情况变得更糟——尽管调用session.delete
时在连接上设置了CascadeType.ALL
和orphanRemoval = true
,但hibernate正在通过将OrderHeaderID
设置为null来更新列表中的OrderLine
,这会引发异常
这两个表的DDL只包含一个简单主键的普通数据定义。每个DAO操作都在一个双会话中执行
可能是我遗漏了什么吗?关系注释看起来不错,我非常确定我使用了正确的方法访问数据库(尽管我已经尝试了所有方法)。我真的没有选择了。欢迎任何建议,谢谢
编辑:更新了定义,现在我得到ERROR org.hibernate.util.JDBCExceptionReporter - Table 'dbname.orderheader_orderline' doesn't exist
# 1 楼答案
1-你的问题显然是@OneToMany映射,它应该是这样的:
2-也就是说,只在@OneToMany上保留级联和内容,然后删除:
来自@manytone
编辑以下是代码的外观: @有@JoinColumn的很多人。。。还有@OneToMany和mappedBy