您的位置:首页 > 移动开发

JPA,在@OneToMany里加入mappedBy属性

2010-04-16 12:44 405 查看
凡是双向必设mappedBy
JPA,在 @OneToMany里加入mappedBy属性避免生成中间表
 
使用JPA的时候,如果A B两个实体间是一对多,多对一的关系,如果不在@OneToMany里加入mappedBy属性(相当于inverse=”true”)会导致自动生成一个多余的中间表。比如:
 
 
 
@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表。
 
 
又如:
 
In Customer class
 
@OneToMany(cascade=ALL, mappedBy="customer")
public  Set getOrders() {
       return orders;
}
 
 
In Order class
 
@ManyToOne
@JoinColumn(name="CUST_ID", nullable=false)
public Customer getCustomer() {
       return customer;
}
 
 
mappedBy="customer"
说明在两个关联的实体Bean中,orders这一端是关系的拥有者,Orders一方的表中生成到关联类的外键
且mappedBy只有在双向关联时,才会使用这个属性
cascade=ALL
说明,当Orders做CRUD操作时,Customer都会进行相应操作
 
onetoone 双向@OneToOne(mappedBy="wife")
    @JoinColumn(name="hId")有用吗  变成不是双向了
——————虽然数据库表是一样的,但是在java里面实现起来是不一样的  一个是单向的 一个是双向的 设了 @OneToOne(mappedBy="wife")
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jpa class bean 数据库 java