您的位置:首页 > 其它

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"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: