Java 如果我们不在OneToMany注释中指定mappedBy属性会怎么样?

Java 如果我们不在OneToMany注释中指定mappedBy属性会怎么样?,java,hibernate,jpa,Java,Hibernate,Jpa,这些天我在用hibernate学习JPA。我无法理解,如果未指定mappedBy属性,为什么hibernate会对双向一对一关系给出错误。以下是我遇到错误的代码: @Entity public class Item { @Id private long id; private String name; private String description; @OneToMany() Set<Bid> bids = new HashSet&

这些天我在用hibernate学习JPA。我无法理解,如果未指定mappedBy属性,为什么hibernate会对双向一对一关系给出错误。以下是我遇到错误的代码:

@Entity
public class Item {
    @Id
    private long id;
    private String name;
    private String description;
   @OneToMany()
    Set<Bid> bids = new HashSet<Bid>();
在主类中,我同时保存父实体和子实体:

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();

请告诉我为什么hibernate会生成额外的查询,以及mappedBy元素将如何解决这个问题。

因为如果不指定
mappedBy
,你不是说
Item
Bid
之间的
OneToMany
Item
之间的
manytone
实际上是一个独特的双向关联的两面

所以Hibernate认为它们是两个不同的单向关联。由于
OneToMany
关联的默认映射是使用联接表,所以Hibernate就是这样使用的

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();
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 (?, ?)