【问题标题】:Hibernate mapping with group by clause?使用 group by 子句进行休眠映射?
【发布时间】:2014-04-02 14:43:37
【问题描述】:

我在 pojo 中有 @OneToMany 映射,我需要按列对结果列表进行分组。我有如下映射;

@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "X", referencedColumnName = "X", insertable = false, updatable = false)
@NotFound(action = NotFoundAction.IGNORE)
@Fetch(FetchMode.SELECT)
public Set<MyType> getSiblings() {
    return siblings;
}

我需要在这个映射中添加GROUP BY 子句,这可能吗?

【问题讨论】:

  • 不,我不认为您可以添加“分组依据”,但您可以使用 @OrderBy
  • 不知道你想做什么,但@JoinColumnsOrFormulas经常帮我改正我的脏活。

标签: java sql hibernate group-by hibernate-mapping


【解决方案1】:

我认为您正在寻找的是对映射到多映射的支持,这是一个具有一个键的映射,值是所有与同一个键关联的值的列表。

Hibernate 不支持此功能,这是他们论坛中的 thread 并试图实现它。

另一种方法是在属性级别仍然映射到 Set,然后提供一个快速进行分组的 getter。这对消费者来说是透明的,并且只会成为非常大的数据集的问题:

@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "X", referencedColumnName = "X", insertable = false, updatable = false)
@NotFound(action = NotFoundAction.IGNORE)
@Fetch(FetchMode.SELECT)
private Set<MyType> siblings;

public Map<String,List<MyType>> getSiblings() {
   ... do the grouping manually in Java ...
}

【讨论】:

    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多