JPA实现一对多(OneToMany)关联
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 a 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.数据持久化存储
需要注意的是,在持久化存储时,我们只需要对Exam类进行merge或者persist即可,JPA会自动将其集合关联类进行持久化存储,而不需要我们对ExamUserAns再执行persist方法,但是我们需要设置examUserAns.setExam(exam)来维护这种关联。
相关推荐
- 如何实现一条网线一台电脑多IP多帐号登录某个网站-用VMLogin中文版防关联指纹浏览器实现
- MyBatis:自关联查询——多对多查询的实现
- SpringBoot与Mybatis整合(包含generate自动生成代码工具,数据库表一对一,一对多,关联关系中间表的查询)
- [log] jpa单向和双向一对多、多对多
- 一对多双向关联 、 多对一
- MyBatis:一对多自关联查询的实现
- mybaits xml实现继承关系dto自定义对象关联查询(一对多)
- 33MyBatis - 关联查询(一对多查询)
- 关联查询(一对多)
- mybatis 一对多和多对一关联查询
- Hibernate---inverse,cascade(1)
- Hibernate复习之关联关系一对多映射