【发布时间】:2019-12-02 17:55:15
【问题描述】:
我目前被 Hibernate 困住:我想使用公式(和连接表)获取字符串集合
环境
- Java 12
- 休眠 5.3.5.Final
- MariaDB 10.0.29
数据库
| Foo |
|:---------------:|
| id : String |
| Bar |
|:---------------:|
| id : String |
| foo_id : String |
| baz_id : String |
休眠映射
为了清楚起见,没有 getter/setter/constructor...
@Entity
@Table(name = "foo")
public class Foo {
@Id
private String id;
@JoinColumn(name = "foo_id")
private List<Bar> bars;
}
@Entity
@Table(name = "bar")
public class Bar {
@Id
private String id;
@Column(name = "foo_id")
private String fooId;
@Column(name = "baz_id")
private String bazId;
}
(同一foo_id的多个bar可以有相同的baz_id)
现在我的问题:)
我想在 Foo 类中为相应的 Bars 获取唯一 bazId 的集合(集合或列表)。我知道我可以获取所有 Bar 并用 Java 计算集合,但这是一项非常昂贵的操作,所以我想使用 SQL 查询来执行它。
我尝试在 Foo 类中编写以下内容:
@ElementCollection(targetClass = String.class)
@Formula("SELECT DISTINCT(b.baz_id) FROM bar b WHERE b.foo_id : id")
private Collection<String> bazIds;
但我收到以下错误:
表“database.Foo_bazIds”不存在
如何获取我想要的数据(可能是 Hibernate 不支持,找不到任何关于 @Formula 和集合的文档...)?
谢谢
【问题讨论】: