JPA,在@OneToMany里加入mappedBy属性

本文详细解释了在使用JPA时,一对多关系中 mappedBy 属性的作用,以及不正确使用可能导致的问题。通过实例展示了如何正确设置 mappedBy 属性来避免生成不必要的中间表,提高数据库设计效率。

凡是双向必设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 和表BB中会有一个到表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

说明,OrdersCRUD操作时,Customer都会进行相应操作

 

onetoone 双向@OneToOne(mappedBy="wife")

    @JoinColumn(name="hId")有用吗  变成不是双向了

——————虽然数据库表是一样的,但是在java里面实现起来是不一样的  一个是单向的 一个是双向的 设了 @OneToOne(mappedBy="wife")

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值