我有一个实体对象,其中包含两个元素集合:
@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 的表格,用于执行类别与映射的 ReportItem 之间的映射。但是,当尝试保存地图时,这会失败,enther * catElecItem_key *或* catBranchItem_key *将为null。 如果我尝试使用 nullable = true 进行注释,则无法创建表,因为两个键都用作主键定义的一部分。
是否可以为每个集合指定使用不同的表?
答案 0 :(得分:4)
您是否尝试过使用@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;
答案 1 :(得分:0)
使用 @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;
...
}