Hibernate:映射@OneToMany 关系的最后一行
Posted
技术标签:
【中文标题】Hibernate:映射@OneToMany 关系的最后一行【英文标题】:Hibernate: map last row of a @OneToMany relation 【发布时间】:2011-09-27 11:03:12 【问题描述】:我在元素和它的名字之间有一个关系。所有历史名称以及当前名称都位于具有字段“created”的表“element_name”中。最后创建的行是元素的当前名称。
如何将元素的当前名称映射为元素的属性?
class Element implements Serializable
@OneToMany(fetch = FetchType.LAZY)
private List<ElementName> historyOfElementNames;
// What annotations should be used here?
private ElementName currentElementName;
...
提前致谢!
【问题讨论】:
【参考方案1】:您的解决方案的替代方法是映射列表中的所有名称,对该列表进行排序,然后将当前名称设为elementNames.get(elementNames.size() - 1)
。
要启用此功能,请添加 @IndexColumn
注释以及实际的索引列和索引。这样您还可以获得名称更改的顺序。
编辑:从 Hibernate 3.5 开始,@IndexColumn
似乎已重命名为 @OrderColumn
。
【讨论】:
@user966810 好吧,我似乎没有一种简单的方法可以仅使用注释来实现这一点。您可以将currentElementName
设为一个集合并应用过滤器(@Filter
注释)以仅选择最新的。由于您将这两个属性映射到一个表/列,请记住其中一个属性需要是只读的 (insertable = false, updatable = false
)。
这在某些情况下会起作用,但那样我可能无法根据名称过滤一堆元素(实际上我的元素对其状态有相同的想法,这通常是条件条款)。通过使用公式注释,我几乎实现了我所需要的,但事实证明,公式只能用于映射字段而不是对象。以上是关于Hibernate:映射@OneToMany 关系的最后一行的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate - OneToMany 单向映射 - SQLGrammarException
Hibernate OneToMany SELECT 在实体的映射中给出重复的列
笔记:Hibernate 持久化类标注示例-双向1-N关系映射