16.1:多映射
1.数据库表的映射方式:
在多的一方加外键。
2.类图中字段:
多重性为:1:多
方向性为:
单向导航:“1”这个对象能够找到“多“的对象。所以,在”1“的对象中设置一个属性为集合类型的”多“的对象,在1这类中标明@OneToMany,还要加@joinColumn(name=”groupid”)否则会生成3张表。也可以由”多“一方对象找到”1“一方对象,则包含一个对象即可,在多这个类中标明@ManyToOne
双向导航: 1这个类使用OneToMany,多这个类使用ManyToOne.其中选一个加上mappedBy属性。
导航的方向性按照需求获取。
举例
group和user的关系为1:多
现在需求为:user可以找到所属的group,group不必找到所有的user。
User.java
@Entity @Table(name="t_user") public class User { private Group group; private int id; private String name; @ManyToOne public Group getGroup() { return group; } @Id @GeneratedValue public int getId() { return id; }
Group.java正常。
如果这时Group需要导航到User,即一个Group需要知道这个组中所有的User。此事,属于双向导航,不能同时只是出现“@ManyToOne",@OneToMany”.这时,Group类对getUsers()的注释依然可以使用@transient或者@OneToMany(mappedBy)
@Entity @Table(name="t_group") public class Group { private int id; private String name; private Set<User> users = new HashSet<User>(); @Id @GeneratedValue public int getId() { return id; } public String getName() { return name; } //@OneToMany(mappedBy="group") @Transient public Set<User> getUsers() { return users; }