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"/>