hibernate注解实现1对多和多对多
2016-04-13 21:03
288 查看
1. 一对多: 人和车
@Entity // 表明这是个javabean
@Table(name="person") // javabean对应的表
public class Person {
@Id // 声明主键
@Column(name="pid")
@GenericGenerator(name="wjid",strategy="uuid") // 主键生成策略uuid name随便起,下面可以引用
@GeneratedValue(generator="wjid")
private String id;
@Column(name="pname")
private String name;
@OneToMany
@Cascade(value={org.hibernate.annotations.CascadeType.ALL}) // 级联删除, 删除主表的同时删掉副表
@JoinColumn(name="c_pid") // person 通过外键 c_pid 关联到car
private Set<Car> cars = new HashSet<Car>();
...
}
@Entity
@Table(name="car")
public class Car {
@Id
@Column(name="cid")
@GenericGenerator(name="uuid",strategy="uuid")
@GeneratedValue(generator="uuid")
private String id;
@Column(name="cname")
private String name;
@ManyToOne
@JoinColumn(name="c_pid") // 也是car通过 c_pid关联到person
private Person person;
...
}
hibernate.cfg.xml
<mapping class="cn.itcast.domain4.Person"/>
<mapping class="cn.itcast.domain4.Car"/>
2. 多对多: 用户和角色
@Entity
@Table(name="users")
@GenericGenerator(name="uuid",strategy="uuid")
public class User {
@Id
@Column(name="u_id")
@GeneratedValue(generator="uuid")
private String id;
@Column(name="u_name")
private String name;
@ManyToMany
@Cascade(value={CascadeType.SAVE_UPDATE})
@JoinTable(name="ru", //指定中间表的表名
joinColumns={@JoinColumn(name="ru_uid")}, //正引用,是指本类的主键关联 到 中间表的外键
inverseJoinColumns={@JoinColumn(name="ru_rid")} // 反引用, 通过中间表的ru_rid关联到Role表的r_id
)
private Set<Role> roles = new HashSet<Role>();
...
}
@Entity
@Table(name="roles")
@GenericGenerator(name="uuid",strategy="uuid")
public class Role {
@Id
@Column(name="r_id")
@GeneratedValue(generator="uuid")
private String id;
@Column(name="r_name")
private String name;
@ManyToMany
@Cascade(value={CascadeType.SAVE_UPDATE})
@JoinTable(name="ru", //指定中间表的表名
joinColumns={@JoinColumn(name="ru_rid")}, //正引用,是指本类的主键关联的中间表的外键
inverseJoinColumns={@JoinColumn(name="ru_uid")}
)
private Set<User> users = new HashSet<User>();
}hibernate.cfg.xml
<mapping class="cn.itcast.domain5.User"/>
<mapping class="cn.itcast.domain5.Role"/>
@Entity // 表明这是个javabean
@Table(name="person") // javabean对应的表
public class Person {
@Id // 声明主键
@Column(name="pid")
@GenericGenerator(name="wjid",strategy="uuid") // 主键生成策略uuid name随便起,下面可以引用
@GeneratedValue(generator="wjid")
private String id;
@Column(name="pname")
private String name;
@OneToMany
@Cascade(value={org.hibernate.annotations.CascadeType.ALL}) // 级联删除, 删除主表的同时删掉副表
@JoinColumn(name="c_pid") // person 通过外键 c_pid 关联到car
private Set<Car> cars = new HashSet<Car>();
...
}
@Entity
@Table(name="car")
public class Car {
@Id
@Column(name="cid")
@GenericGenerator(name="uuid",strategy="uuid")
@GeneratedValue(generator="uuid")
private String id;
@Column(name="cname")
private String name;
@ManyToOne
@JoinColumn(name="c_pid") // 也是car通过 c_pid关联到person
private Person person;
...
}
hibernate.cfg.xml
<mapping class="cn.itcast.domain4.Person"/>
<mapping class="cn.itcast.domain4.Car"/>
2. 多对多: 用户和角色
@Entity
@Table(name="users")
@GenericGenerator(name="uuid",strategy="uuid")
public class User {
@Id
@Column(name="u_id")
@GeneratedValue(generator="uuid")
private String id;
@Column(name="u_name")
private String name;
@ManyToMany
@Cascade(value={CascadeType.SAVE_UPDATE})
@JoinTable(name="ru", //指定中间表的表名
joinColumns={@JoinColumn(name="ru_uid")}, //正引用,是指本类的主键关联 到 中间表的外键
inverseJoinColumns={@JoinColumn(name="ru_rid")} // 反引用, 通过中间表的ru_rid关联到Role表的r_id
)
private Set<Role> roles = new HashSet<Role>();
...
}
@Entity
@Table(name="roles")
@GenericGenerator(name="uuid",strategy="uuid")
public class Role {
@Id
@Column(name="r_id")
@GeneratedValue(generator="uuid")
private String id;
@Column(name="r_name")
private String name;
@ManyToMany
@Cascade(value={CascadeType.SAVE_UPDATE})
@JoinTable(name="ru", //指定中间表的表名
joinColumns={@JoinColumn(name="ru_rid")}, //正引用,是指本类的主键关联的中间表的外键
inverseJoinColumns={@JoinColumn(name="ru_uid")}
)
private Set<User> users = new HashSet<User>();
}hibernate.cfg.xml
<mapping class="cn.itcast.domain5.User"/>
<mapping class="cn.itcast.domain5.Role"/>
相关文章推荐
- 正则表达式常用规则
- minFunc 2012:Huber loss
- html frameset边框问题 去掉横条
- JavaWeb——允许授权的IP访问站点过滤器
- WCF学习分享2
- Node.js垂直水平扩展与消息集成方案
- tcp三次握手四次挥手(及原因)详解
- Linux 网络设备驱动开发(二) —— Linux 网络栈剖析
- inflater.inflate(R.layout.main_tab_01, null)与inflater.inflate(R.layout.main_tab_01, container, false
- 随机生成10个数(使用9种循环)
- gcc安装问题
- H3C DHCP
- 对于jQuery的click事件出现重复情况的对策
- 多叉树的递归和非递归遍历
- Redis+linux自定义池化(三)
- Java 多线程锁机制
- 屏蔽Home键
- 单链表
- 《linux高性能服务器编程》学习笔记(一)
- 修改linux 文件权限命令 chmod