我有以下实体:
____________________ ____________________
| Activity | | Benefit |
------------------ | |------------------|
| activityId:long |-------------| benefitId: long |
| activity:varchar | | activityId: long |
| .... | | benefit: varchar |
-------------------- -------------------|
我可以将它映射到Hibernate,所以我最终得到了这个:
@Entity
class Activity {
@Id
private Long id;
private String activity;
private List<String> benefits;
}
答案 0 :(得分:2)
是的,您可以使用@ElementCollection
标记。
以下是您的代码的样子:
@Entity
@Table(name = "Activity")
class Activity {
@Id
@Column(name="activity_id")
private Long id;
@Column(name = "name")
private String activity;
@ElementCollection
@CollectionTable(
name = "Benefit",
joinColumns = @JoinColumn(name = "activityId")
)
private List<String> benefits;
}
虽然我会调用表ActivitiesBenefits
而不是Benefit
来表明该表将存储成对的活动和好处。此外,不需要benefitId
,因为好处是一个弱实体(没有活动就不能存在),所以你也可以放弃它。
参考:https://en.wikibooks.org/wiki/Java_Persistence/ElementCollection
答案 1 :(得分:1)
您好我能找到一种可以做到的方法。下面是相同的代码。
@Entity
@Table(name = "Activity")
class Activity {
@Id
@Column(name="activity_id")
private Long id;
@Column(name = "name")
private String activity;
@OneToMany
@Formula("(select CONCAT(benefitId, activityId, benefit) from Benefit b where b.activityId = activity_id)")
private List<String> benefits;
}
我正在使用sql返回的好处列表,然后连接它并将其存储在我们的好处列表中。 公式中的字符串是SQL(不是HQL),因此它的列名称不是归档成员名称。