Ank*_*kit 0 java hibernate jpa
这些天我正在用hibernate学习JPA.我无法理解为什么如果未指定mappedBy属性,hibernate会为双向OnetoMany关系提供错误.以下是我收到错误的代码:
@Entity
public class Item {
@Id
private long id;
private String name;
private String description;
@OneToMany()
Set<Bid> bids = new HashSet<Bid>();
Run Code Online (Sandbox Code Playgroud)
出价是ITEM的子实体
@Entity(name="BIDS")
public class Bid {
@Id
@Column(name="BID_ID")
private Long id;
private Double amount;
@ManyToOne
@JoinColumn(name="ITEM_ID")
Item item;
Run Code Online (Sandbox Code Playgroud)
在主类我保存父和子实体:
Transaction transaction = session.beginTransaction();
Item item = new Item();
item.setId(111);
item.setDescription("ITEM Description");
item.setName("Name1");
Bid bid = new Bid();
bid.setId(21l);
bid.setAmount(1.1);
bid.setItem(item);
Set<Bid> bids = new HashSet<Bid>();
bids.add(bid);
item.setBids(bids);
session.save(item);
session.save(bid);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
但是hibernate尝试执行以下查询并抛出ITEM_BIDS表不存在.
Hibernate: insert into Item (description, name, id) values (?, ?, ?)
Hibernate: insert into BIDS (amount, ITEM_ID, BID_ID) values (?, ?, ?)
Hibernate: insert into Item_BIDS (Item_id, bids_BID_ID) values (?, ?)
Run Code Online (Sandbox Code Playgroud)
请告诉我为什么hibernate会产生额外的查询以及mappedBy元素将如何解决这个问题.
因为如果你不指定mappedBy,你不是说OneToMany之间Item和Bid与ManyToOne之间Bid和Item实际上是一个独特的双向关联的两个方面.
所以Hibernate认为它们是两个不同的单向关联.而且由于OneToMany关联的默认映射是使用连接表,这就是Hibernate使用的.
| 归档时间: |
|
| 查看次数: |
616 次 |
| 最近记录: |