【问题标题】:is this code normal behavior of ORMs?这段代码是 ORM 的正常行为吗?
【发布时间】:2015-01-24 02:21:26
【问题描述】:

我有这两个对象:ProjectHistory

这是这些类的最少代码

项目

@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 的正确行为。

基本上,如果它看起来像这样,那将是理想的:

  • 创建历史记录 + 设置历史记录
  • 创建 Project + 设置 Project + 在 Project 的列表 history 中添加 History时间>
  • 使用其 DAO 在数据库中插入 项目

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

  • 创建历史记录 + 设置历史记录
  • 创建 Project + 设置 Project + 在 Project 的列表 history 中添加 History时间>
  • 使用其 DAO 在数据库中插入历史
  • 使用其 DAO 在数据库中插入 项目

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

无论如何,这是任何 ORM 的正常行为还是我的 ORM 在愚弄我?

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

【问题讨论】:

    标签: java sqlite orm one-to-many many-to-one


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多