【问题标题】:Hibernate: map last row of a @OneToMany relationHibernate:映射@OneToMany 关系的最后一行
【发布时间】: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;

    ...
}

提前致谢!

【问题讨论】:

    标签: java hibernate annotations hibernate-onetomany


    【解决方案1】:

    您的解决方案的替代方法是映射列表中的所有名称,对该列表进行排序,然后将当前名称设为elementNames.get(elementNames.size() - 1)

    要启用此功能,请添加 @IndexColumn 注释以及实际的索引列和索引。这样您还可以获得名称更改的顺序。

    编辑:从 Hibernate 3.5 开始,@IndexColumn 似乎已重命名为 @OrderColumn

    【讨论】:

    • @user966810 好吧,我似乎没有一种简单的方法可以仅使用注释来实现这一点。您可以将currentElementName 设为一个集合并应用过滤器(@Filter 注释)以仅选择最新的。由于您将这两个属性映射到一个表/列,请记住其中一个属性需要是只读的 (insertable = false, updatable = false)。
    • 这在某些情况下会起作用,但那样我可能无法根据名称过滤一堆元素(实际上我的元素对其状态有相同的想法,这通常是条件条款)。通过使用公式注释,我几乎实现了我所需要的,但事实证明,公式只能用于映射字段而不是对象。
    猜你喜欢
    • 2012-02-08
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2014-04-08
    相关资源
    最近更新 更多