gpt4 book ai didi

java - Hibernate 不会更新或删除,但会插入

转载 作者:行者123 更新时间:2023-11-29 01:54:47 31 4
gpt4 key购买 nike

我正在处理现有数据库并创建了 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 时情况变得更糟 - 尽管在调用 时在连接上设置了 CascadeType.ALLorphanRemoval = true session.delete hibernate 正在通过将 OrderHeaderID 设置为 null 来更新列表中的 OrderLine,这会引发异常。

两个表的 DDL 仅包含带有单个简单主键的普通数据定义。每个 DAO 操作都在一个单独的 session 中执行。

难道是我遗漏了什么?关系注释看起来没问题,我很确定我正在使用正确的方法来访问数据库(尽管我已经尝试了所有方法)。我真的没有选择了。欢迎任何建议,谢谢

编辑:更新了定义,现在我得到了 ERROR org.hibernate.util.JDBCExceptionReporter - Table 'dbname.orderheader_orderline' doesn't exist

最佳答案

1 - 您的问题显然是 @OneToMany 映射,它应该如下所示:

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy="orderHeader")
List<OrderLine> orderLineList;
  • mappedBy 值告诉 JPA 它是一个双向关系
  • 没有@JoinColumn:它已经在@ManyToOne 中设置

2 - 也就是说,只在@OneToMany 上保留级联和内容并删除:

(fetch = FetchType.LAZY, cascade = CascadeType.ALL)

来自@ManyToOne ..

编辑 您的代码应该如下所示:@ManyToOne 与 @JoinColumn ... 和 @OneToMany 与属性 mappedBy

@Entity
@Table(name = "orderline")
public class OrderLine implements Serializable {

@Id
@Column(name = "OrderLineID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer orderLineID;

@ManyToOne
@JoinColumn(name = "OrderHeaderID")
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, mappedBy="orderHeader")
List<OrderLine> orderLineList;
}

关于java - Hibernate 不会更新或删除,但会插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32229932/

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