Hibernate映射

时间:2015-08-03 21:38:26

标签: hibernate jpa hibernate-mapping

我获得了一个包含一些现有数据的数据库,我必须使用Hibernate处理它而不删除旧数据。我的问题是我必须插入一个新的子对象并将其与现有的父对象相关联。我已经使用过hibernate,但我从未遇到类似的问题。

例如:记录已经存在于“学生”表中,现在我想创建一个“项目”对象,保存它,并与该学生记录相关联。我该怎么处理?是从“Project”类中删除学生引用(将两个类“无映射”分开)并将其替换为FK属性是一种好方法吗?

儿童班

@Entity
@Table(name="PROJECT")
public class Project {

  @Id @GeneratedValue 
  @Column(name="ID")
  private int projectId;

  @Column(name="PROJECT_NAME")
  private String projectName;

  @ManyToOne(cascade=CascadeType.ALL)
  @JoinColumn(name="STUDENT_PROJECT")
  private Etudiant studentProject;

//getters and setters

}

父类:

@Entity
@Table(name="STUDENT")
public class Student {
  @Id @GeneratedValue 
  @Column(name="ID")
  private int studentId;

  @Column(name="STUDENT_NAME")
  private String studentName;

  //getters and setters
}

1 个答案:

答案 0 :(得分:0)

在添加PROJECT表时,您可以自由添加映射到STUDENT表所需的外键。您已将此外键称为STUDENT_PROJECT,并在您的映射中使用;

  @ManyToOne(cascade=CascadeType.ALL)
  @JoinColumn(name="STUDENT_PROJECT")
  private Etudiant studentProject;

我认为Etudiant是指 学生 实体。

您已将此字段命名为studentProject - 但要明确它是Student而不是Project,我会称之为“学生”。

在任何情况下,此studentProject字段都包含学生的实例。

看起来很好。您无需修改​​学生表。您可以添加Project个实体,它们将被插入并与现有的STUDENT记录相关联。

我会小心cascade = CascadeType.ALL,因为删除Project会级联关系并尝试删除可能不需要的Student并且如果删除的Project有兄弟姐妹会导致FK约束错误,并且您已正确设置了DB constriants。

此外,您可以通过在Student实体中添加以下@OneToMany注释来使关系成为双向关系

@OneToMany(mappedBy=" studentProject")
private Collection<Project> projects;

//getters and setters
  

删除学生参考(将两个班级分开&#34;没有   映射&#34;)来自&#34;项目&#34;)上课并用FK替换它   属于一个好方法?

如果要保留实体并将它们相互关联,则必须具有一些映射。您可以通过使用单独的joinTable删除任一表中对FK的需要,并且如果您需要,也可以构成ManyToMany关系的基础。大量参考 - 试试这个开始。 https://en.wikibooks.org/wiki/Java_Persistence