【问题标题】:Using @Formula with a collection in Java / Hibernate在 Java / Hibernate 中使用 @Formula 和集合
【发布时间】: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 和集合的文档...)?

谢谢

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    我试图像你一样使用@Formula,但我得出的结论是它不应该那样工作。相反,我是这样解决的:

    @ElementCollection
    @CollectionTable(name = "bar", joinColumns = @JoinColumn(name = "foo_id"))
    @Column(name = "baz_id")
    private Set<String> bazIds; 
    

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多