gpt4 book ai didi

java - 这段代码是 ORM 的正常行为吗?

转载 作者:行者123 更新时间:2023-12-01 11:59:05 24 4
gpt4 key购买 nike

我有这两个对象:项目历史

以下是这些类的最少代码

项目

@Entity(name = "projects")
public class Project {

@Id
private String name;

@OneToMany(MappedBy = "project")
private List<History> histories;
}

历史

@Entity(name = "histories")
public class History {

@Id
private Integer id;

@ManyToOne
@JoinColum(name = "project_name")
private Project project;
}

我在创建 EntityManager 和创建表时没有遇到任何问题。一切都在这里,正确的列轻轻地等待数据插入。

但是,我不确定这是否是 ORM 的正确行为。

基本上,如果它看起来像这样那就太理想了:

  • 创建历史记录 + 设置历史记录
  • 创建项目 + 设置项目 + 在项目的列表历史记录中添加历史记录 em>
  • 使用 DAO 将项目插入数据库

当我尝试执行这样的代码时,只有projects表中有数据,histories表为空,这迫使我编写如下代码:

  • 创建历史记录 + 设置历史记录
  • 创建项目 + 设置项目 + 在项目的列表历史记录中添加历史记录 em>
  • 使用 DAO 在数据库中插入历史记录
  • 使用 DAO 将项目插入数据库

好的,这只是一行额外的代码,但是如果我需要获取数据或向一个项目添加更多历史记录怎么办?如果是这样,我需要加载项目和所有相关的历史记录,并将物理历史记录添加到 Project 对象中......这样的代码很容易编写起来变得繁琐和麻烦。

无论如何,这是任何 ORM 的正常行为还是我的 ORM 欺骗了我?

注意:我正在使用带有 SQLite 驱动程序的 ORMLite。

最佳答案

我相信您观察到的行为是默认行为,但您应该能够更改它并使底层 History 对象默认保留。在 Project 中的 @OneToMany 注释上,尝试将 cascade 字段指定为 cascade = CascadeType.PERSIST(假设您正在使用javax.persistence.OneToMany)。请参阅documentation其他选项。

关于java - 这段代码是 ORM 的正常行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28121661/

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