有谁知道是否以及如何使用hibernate条件API编写以下问题的解决方案(由JPAAPI编写)?
更具体地说,我有一个讨论实体,其中包含参与者列表(这是用户名列表):
@ElementCollection @Column(name = "user_name") @CollectionTable(name = "DISCUSSION_USER", joinColumns = @JoinColumn(name = "DISCUSSION_ID")) @OrderColumn(name = "ORDER_INDEX") private List<String> participants = new ArrayList<String>();
现在,我需要检索给定用户名是参与者的所有讨论。
如果我要为参与者创建一个实体,这将很简单:
Criteria crit = getSession().createCriteria(Discussion.class); crit.createAlias("participants", "p"); crit.add(Restrictions.eq("p.userName", portalUsername));
但是我无法使用非实体创建别名…
正如解释在这里我想要的东西是不可能的:
使用ElementCollection而不是OneToMany的局限性在于,无法独立于其父对象来查询,持久化和合并目标对象。它们是严格私有的(从属)对象,与嵌入式映射相同。ElementCollection上没有层叠选项,目标对象始终与其父对象保持,合并或删除。
因此,我改为使用OneToMany。