日期:2014-05-16  浏览次数:20428 次

Hibernate OneToMany中的mappedBy

mappedBy用于指定在双向关系中的两个关联实体中哪个实体是被关联处理的.

?

1、@OneToMany(mapped=“由One的一方指向Many的一方,并且,这个属性应该等于Many的一方中含有One类的属性的属性名,否则会出错啦 ”)

如:一个Class中有多个Students。

?

1)在Class PO中:
@OneToMany(targetEntity=StudentPO.class,mappedBy="myclass",cascade=javax.persistence.CascadeType.ALL)

?

@Cascade(CascadeType.ALL)

?

private Set<StudentPO> studentSet;

?

?

?

2)在StudentPO中:

?

@ManyToOne(targetEntity=ClassPO.class,cascade={CascadeType.ALL})

?

private ClassPO myclass;

?

?

其中ClassPO中的mappedBy= ?StudentPOst中的 ?myclass;
2、@OneToMany里面加入mappedBy?防止生成中间表

使用JPA的时候,如果A B两个实体间是一对多,多对一的关系,如果不在@OneToMany里加入mappedBy属性会导致自动生成一个多余的中间表。比如:

@Entity
public class A {
    @OneToMany(mappedBy="a")
    public Set<B> bs = new HashSet<B>(0);
}
 
@Entity
public class B {
    @ManyToOne
    public A a;
}

这样写会只成生成表A和表B,B中会有一个到表A的外键。但是如果不加mappedBy=”a”, 那么就会再生成一张A_B表。

?

?

在本例中,如果我们没有填mapped这个属性,则会产生三张表,一张表是用来管理这两张表的,如主键中mappedBy的具体使用及其含义

?

?