Hibernate多对多@ManyToMany及多对一@ManyToOne学习
来源:互联网 发布:windows中的文件属性 编辑:程序博客网 时间:2024/05/29 15:06
1. 多对多映射(@ManyToMany)
比如:班级和课程,一个班级可以对应多个课程,一个课程可以对应多个课程,故班级和课程之间的关系应当是多对多.那么,在写Hibernate的注解时就可以这么写…(加粗加斜加红部分)
Course类:
@Entity
@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name="t_course")
public class Courseextends BaseEntity{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="course_id")
private int courseId;
@Column(name="course_no")
privateString courseNo;
@Column(name="course_name")
privateString courseName;
@Column(name="course_type")
private int courseType;
@Column(name="nature")
privateString nature;
@Column(name="credit")
private double credit;
@Column(name="period")
private int period;
@Column(name="college")
privateString college;
@Column(name="department")
privateString department;
@Column(name="creator")
private int creator;
@Column(name="materia_path")
privateString materiaPath;
@Column(name="valid")
private int valid;
@Column(name="create_date")
private DatecreateDate;
@ManyToMany(cascade= CascadeType.PERSIST, fetch =FetchType.LAZY)
@JoinTable(name ="t_class_course",
joinColumns ={@JoinColumn(name = "course_id", referencedColumnName ="course_id")},
inverseJoinColumns= {@JoinColumn(name = "class_id", referencedColumnName ="class_id")})
private List<Class> classes;
Class类:
@Entity
@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name="t_class")
public class Class extends BaseEntity{
/**
*
*/
private static final long serialVersionUID =1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="class_id")
private int classId;
@Column(name="class_name")
privateString className;
@Column(name="type")
private int type;
@Column(name="path")
private int path;
@Column(name="class_year")
private int classYear;
@ManyToMany(cascade= CascadeType.PERSIST, fetch =FetchType.LAZY)
@JoinTable(name ="t_class_course",
joinColumns ={@JoinColumn(name = "class_id", referencedColumnName ="class_id")},
inverseJoinColumns= {@JoinColumn(name = "course_id", referencedColumnName="course_id")})
private List<Course> courses;
@Column(name="valid")
private int valid;
@Column(name="create_date")
private DatecreateDate;
表示的意思是:
@ManyToMany 多对多关系,cascade级联属性,fetch抓取策略
@JoinTable 生成的表,name生成表的名字,joinColumns关联属性的集合,joinColumn关联属性
这样会生成一张表t_class_course
表中有两个字段,分别引用自t_class和t_course
当我要访问t_class中的course时,只需要在java代码中直接getCourse()就可以得到course的集合了.
但当我需要使用其他字段例如createDate字段时,那么自动生成的表就无法满足我们的要求.为了能让我们自己控制表的结构.可以将多对多关系拆分成两个多对一关系,现在有如下3张表
t_class,t_course,t_class_course各对应各自的类(t_class_course不再是由hibernate自动生成)
在t_class_course中这样写.
@Entity
@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name="t_user_class")
public classUser_Class extends BaseEntity{
private static final long serialVersionUID =1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="user_class_id")
private int userClassId;
@ManyToOne(targetEntity=Course.class,fetch=FetchType.LAZY)
@JoinColumn(name="course_id",updatable=false)
private Coursecourse;
@ManyToOne(targetEntity=Class.class,fetch=FetchType.LAZY)
@JoinColumn(name="class_id",updatable=false)
private Classclas;
@Column(name="type")
private int type;
@Column(name="valid")
private int valid;
@Column(name="create_date")
private DatecreateDate;
在这种情况下,如果我们想访问某个班级所对应的课程,那么我们应当从t_class_course表下手,查询特定class_id的记录,返回的是一个Class_Course的集合,那么遍历这个集合,集合中的Course对象就是我们所要查询的对象,然后根据我们的需要输出Course对象中的信息即可!
- Hibernate多对多@ManyToMany及多对一@ManyToOne学习
- @ManyToOne单向多对一
- Hibernate ManyToOne Mappings 多对一关联映射
- HIbernate关系映射--单向多对一@ManyToOne
- Hibernate 单边多对多关系 @ManyToMany
- hibernate 学习二——多对一关系(ManyToOne)
- ManyToMany(多对多)persistence
- Hibernate中的manytomany映射实例一(多对多双向)
- Hibernate中manytomany实例二(多对多单向)
- hibernate关系映射--单向多对多@ManyToMany
- hibernate关系映射--双向多对多@ManyToMany
- Hibernate之多对多单向关联(ManyToMany)
- Hibernate 多对一关联的CRUD__@ManyToOne(cascade=(CascadeType.ALL))
- Hibernate关系映射(三)多对一单向关联@ManyToOne Annotation方式
- 多对多关联查询 ManyToMany
- Hibernate一对多及多对一
- Hibernate多对一
- hibernate多对一
- poj 1180 Batch Scheduling 斜率优化dp
- 学习是为了找工作?
- BZOJ 1622: [Usaco2008 Open]Word Power 名字的能量
- undefined reference to libiconv_open ext/iconv/.libs/iconv.o by install phpsource
- 使用this调用本类中的属性
- Hibernate多对多@ManyToMany及多对一@ManyToOne学习
- Linux下memcached安装和启动方法
- 客户端Cookie的设置——可完成记住密码的操作
- 使用this调用构造方法
- 韩语学习之第一课
- 模板类与类模板、函数模板与模板函数等的区别
- 使用static声明方法
- URAL 1203 Scientific Conference(贪心 || DP)
- BZOJ 1623: [Usaco2008 Open]Cow Cars 奶牛飞车