当前位置: 首页 > 知识库问答 >
问题:

如果我们没有在OneTo多国注解中指定mapedBy属性怎么办?

皇甫卓君
2023-03-14

这些天我正在使用hibernate学习JPA。我不明白为什么hibernate在未指定mepdBy属性的情况下会为双向Oneto许多关系出错。以下是我收到错误的代码:

@Entity
public class Item {
    @Id
    private long id;
    private String name;
    private String description;
   @OneToMany()
    Set<Bid> bids = new HashSet<Bid>();

Bid是项目的子实体

@Entity(name="BIDS")
public class Bid {
    @Id
    @Column(name="BID_ID")
    private Long id;    
    private Double amount;  
    @ManyToOne
    @JoinColumn(name="ITEM_ID")
    Item item;

在主类中,我保存父实体和子实体:

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尝试执行以下查询并抛出ITEM\u 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 (?, ?)

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

共有1个答案

劳英华
2023-03-14

因为如果你不指定映射者,你并不是说项目和投标之间的一个域和投标之间的多个域实际上是一个独特的双向关联的两面。

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

 类似资料:
  • 下面的静音代码。如果一个mod没有指定要静音的成员,机器人怎么能告诉他们呢?谢谢!

  • 问题内容: 我知道这就是某些人不同意的原因,但这真的重要吗?我认为,在与JavaScript交互以及从服务器存储信息和向服务器发送信息时,它们提供的功能胜过了验证问题。我想念什么吗?“无效” HTML的后果是什么?而且自定义DTD是否也无法解决它们? 问题答案: 后果是w3c出现于2、5、10年,并创建了一个具有相同名称的属性。现在,您的页面已损坏。 HTML5将为合法的自定义属性提供一种数据属性

  • 我有一个实体: 当我试图持久化这种类型的第一个实体时,它工作正常,但当我试图用与已存储实体相同的课程保存一个新学生时,它失败了。以下是错误: 我正在使用Spring数据JPA,以Hibernate和H2作为数据库。 应用程序创建了自己的数据库表: 那么,为什么会有一个唯一的约束? 更新: 我看到Hibernate添加了约束: 我怎么告诉Hibernate不要创建它? 谢谢

  • 项目的属性文件 项目的配置类 然而,我正在尝试使用条件配置创建一个SpringBoot starter项目,并希望将属性名称标准化为一些有用的东西,如“com.mycompany.propertygroup.propertyName”,但是为了简化转换并鼓励采用,我还希望在一段时间内支持旧的属性名称,因此我想知道是否有某种方法允许多个属性名称设置同一个字段?例如: 虽然提供的SpEL表达式答案在两

  • 我们的应用程序由与支持bean和无状态EJB服务交互的网页组成,但也有一个与无状态EJB服务交互的远程客户端。 许多服务查询数据库,然后根据当前用户/调用方筛选结果集(例如,用户有权仅查看某些记录类型);也就是说,它们使用编程安全性而不是声明安全性。 在Web端,我的直觉是将当前登录的用户存储在SessionBean中,但我希望无状态EJB服务根据当前登录的用户筛选结果集,以便筛选也适用于远程客户

  • 我阅读了一些文章,发现:默认情况下,预启用了以下HttpMessageConverters实例: ByteArrayHttpMessageConverter-转换字节数组 StringHttpMessageConverter-转换字符串 ResourceHttpMessageConverter-转换org.springframework.core.io.resource用于任何类型的八位组流 So