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;
    }
posted @ 2013-10-14 23:03  FishBird  阅读(175)  评论(0编辑  收藏  举报