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

时间:2015-01-24 02:21:27

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

我有两个对象:项目历史

以下是这些类的最小代码

项目

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

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

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

当我尝试执行这样的代码时,只有 projects 表中包含数据, history 表为空,这迫使我将代码编写为如下:< / p>

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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