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

is this code normal behavior of ORMs?

我有这两个对象: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 和创建 tables。一切都在这里,正确的列轻轻地等待插入数据。

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

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

当我尝试执行这样的代码时,只有 projects table 有数据,histories table 是空的,这迫使我按照以下方式编写代码:

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

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

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

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