【问题标题】:JPA OneToMany bidirectional without join tableJPA OneToMany 双向无连接表
【发布时间】:2014-03-29 11:21:51
【问题描述】:

我目前正在开发一个 java ee 应用程序,但我遇到了 JPA 问题。 我有两个实体:

@Entitiy
public class Restaurant implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Desk> desks;
}

@Entitiy
public class Desk implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @ManyToOne
    @JoinColumn(name = "restaurant_id")
    private Restaurant restaurant;
}

我正在使用以下代码存储桌子:

Desk desk = new Desk();
desk.setNumber(Integer.toString(x));
desk.setRestaurant(restaurant);
em.persist(desk);

但是现在奇怪的是,实体餐厅的桌子列表是空的,但实体桌子中的餐厅值是正确的。 数据库 shema 如下所示:

RESTAURANT (ID)
DESK (ID, RESTAURANT_ID)
RESTAURANT_DESK (RESTAURANT_ID, DESK_ID)

表 RESTAURANT_DESK 始终为空。为什么会生成第三张表?还有为什么实体餐厅的桌子列表是空的?

【问题讨论】:

    标签: java jpa entity-relationship bidirectional


    【解决方案1】:

    对于双向映射,需要在Restaurant实体中赋予mappedBy属性来表示反向关系:

    @Entity
    public class Restaurant implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="restaurant")
        private List<Desk> desks;
    }
    

    【讨论】:

    • 现在将不会创建 RESTAURANT_DESK,但我的列表仍然是空的。坚持办公桌的方式是不是错了?
    • 你说的是哪个列表?你能再显示一些代码吗?
    • 我猜你应该设置关系的双方。 JPA 只知道关系的拥有方。 List&lt;Desk&gt; 并不真正存在于数据库中,而是由restaurant 映射到Desk 表中。
    • Rohit Jain:我说的是实体 Restaurant 中的 List。它总是空的。
    【解决方案2】:

    我发现了问题。我还必须将实体服务台添加到餐厅列表中。

    Desk desk = new Desk();
    desk.setNumber(Integer.toString(x));
    desk.setRestaurant(restaurant);
    restaurant.getDesks().add(desk);
    em.persist(desk);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-09
      • 2014-07-29
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 2021-11-15
      相关资源
      最近更新 更多