【问题标题】:how can I create entity with 2 element collections?如何创建具有 2 个元素集合的实体?
【发布时间】:2011-11-26 10:16:11
【问题描述】:

我有一个包含两个元素集合的实体对象:

@Entity
public class Report {

    // Electronic transactions items map
    @ElementCollection(fetch = FetchType.EAGER)
    @MapKeyColumn(name = "catElecItem_key", nullable = false)
    @Cascade(value = { CascadeType.ALL })
    public Map<Category, ReportItem> catElecItemMap;

    // Branch transactions items map
    @ElementCollection(fetch = FetchType.EAGER)
    @MapKeyColumn(name = "catBranchItem_key", nullable = false)
    @Cascade(value = { CascadeType.ALL })
    public Map<Category, ReportItem> catBranchItemMap;
}

创建表格时,会生成一个名为 Report_ReportItem 的表格,用于在 Category 和映射的 ReportItem 之间进行映射。但是,当尝试保存地图时,这会失败,因此 *catElecItem_key* 或 *catBranchItem_key* 将为空。 如果我尝试使用 nullable = true 进行注释,则该表将无法创建,因为这两个键都用作主键定义的一部分。

是否可以为每个集合指定使用不同的表?

【问题讨论】:

    标签: java hibernate jpa collections playframework


    【解决方案1】:

    你试过使用@CollectionTable注解吗?

    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name="<custom_map_table_name>")
    @MapKeyColumn(name = "catElecItem_key", nullable = false)
    @Cascade(value = { CascadeType.ALL })
    public Map<Category, ReportItem> catElecItemMap;
    

    【讨论】:

      【解决方案2】:

      通过使用 @CollectionTable 注释解决了问题。新类现在看起来像:

      @Entity
      public class Report {
          // Electronic transactions items map
          @ElementCollection(fetch = FetchType.EAGER)
          @MapKeyColumn(name = "catElecItem_key", nullable = false)
          @CollectionTable(name = "TrxReportElecItems", joinColumns = @JoinColumn(name = "id"))
          @Cascade(value = { CascadeType.ALL })
          public Map<Category, ReportItem> catElecItemMap;
      
          // Branch transactions items map
          @ElementCollection(fetch = FetchType.EAGER)
          @MapKeyColumn(name = "catBranchItem_key", nullable = false)
          @CollectionTable(name = "TrxReportBranchItems", joinColumns = @JoinColumn(name = "id"))
          @Cascade(value = { CascadeType.ALL })
          public Map<Category, ReportItem> catBranchItemMap;
         ... 
      }
      

      【讨论】:

        猜你喜欢
        • 2012-09-20
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-08
        • 2015-03-18
        • 2021-10-16
        • 1970-01-01
        相关资源
        最近更新 更多