JPA实现一对多(OneToMany)关联

来源:互联网 发布:空气质量监测数据 编辑:程序博客网 时间:2024/06/05 12:23

JPA实现一对多(OneToMany)关联

 (2012-10-29 20:18:58)
转载
标签: 

杂谈

分类: 技术备忘

 

1.考试类

 

@Entity

public classExam implementsSerializable {

 

   private static final long serialVersionUID= 1L;

  

   @Id

   @GeneratedValue

   private Integer id;  

   private Integer paperId;

   private Integer userId; 

   @Temporal(TemporalType.TIMESTAMP)

   private Date startTime; 

   @Temporal(TemporalType.TIMESTAMP)

   private Date endTime;

   private Integer score;  

   private String remark;  

   private Integer status;

  

   @OneToMany(cascade=CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="exam")

   private List<ExamUserAns> listExamUserAns= newArrayList<ExamUserAns>();

 

   //get and set method here ……

 

}

 

Cascade 级联操作 
CascadeType.
 PERSIST 级联持久化 ( 保存 ) 操作 
CascadeType.
 MERGE 级联更新 ( 合并 ) 操作 
CascadeType.
 REFRESH 级联刷新操作,只会查询获取操作 
CascadeType.
 REMOVE 级联删除操作 
CascadeType.
 ALL 级联以上全部操作 
Fetch
 抓取是否延迟加载,默认情况一的方为立即加载,多的一方为延迟加载 
mappedBy
 关系维护 
mappedBy=
 "exam" 表示在ExamUserAns 类中的 exam 属性来维护关系,这个名称必须和ExamUserAns中的exam属性名称完全一致才行。

另外需要注意Exam类中的集合类型必须是List或者Set,不能设置为ArrayList,否则会报错

Illegal attempt to map non collection as…

 

2.考试答案类

@Entity

public class ExamUserAns implements Serializable {

 

   private static final long serialVersionUID = 1L;

  

   @Id

   @GeneratedValue

   private Integer id;

  

   private Integer questionId;

  

   private String answer;

  

   private Integer score;

  

   private String remark;

  

   @ManyToOne(cascade=CascadeType.ALL)

   @JoinColumn(name="examId")

   private Exam exam;

 

//get and set method here ……

 

}

 

3.数据持久化存储

JPA实现一对多(OneToMany)关联

 

需要注意的是,在持久化存储时,我们只需要对Exam类进行merge或者persist即可,JPA会自动将其集合关联类进行持久化存储,而不需要我们对ExamUserAns再执行persist方法,但是我们需要设置examUserAns.setExam(exam)来维护这种关联。