【问题标题】:Using hibernate @Formula to fetch a collection使用休眠 @Formula 获取集合
【发布时间】:2018-03-20 12:39:58
【问题描述】:

我有一个类似的数据库结构。唯一的区别是我在从 A 到 C 实体的路径上有更多表:

我对这个结构有以下映射:

@Entity
@Table(name = "a")
class A {
    @Id
    private int id;

    private String title;

    @ElementCollection(targetClass=String.class)
    @Formula("(select (c.useful_information) from A a " +
            "join B b on a.id = b.a_id " +
            "join C c on b.id = c.b_id " +
            "where a.id = id)")
    private List<String> usefulStuff;
}

我的目标是从实体 A 中的表 C 中获取所有有用事物的列表。

但我遇到语法错误。

你能说我的例子有什么问题吗?也许你知道更好的方法来达到这个目的?

【问题讨论】:

  • 1.在where 之前缺少一个空格 2. 什么是id?它没有分配给任何表,也没有标记为参数
  • 这只是一个例子。在我原来的例子中,where 后面有一个空格。 id是当前A实体的id。
  • 那么基本where a.id = a.id?这将始终导致true,因此无用
  • 否,它只允许获取当前实体的行。表示表中的a.id匹配当前实体id
  • 您会遇到语法错误,但不要说出它们是什么。生成的 SQL 就是告诉你问题所在,所以发布它

标签: java spring hibernate jpa


【解决方案1】:

@Formula 注释中的问题是“来自 A a”。传递给这个注解的值实际上是 SQL,而不是 JPQL。

因此,如果你想给表起别名以在别处引用它,你需要写FROM A AS a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2014-05-04
    • 2023-03-24
    • 2011-03-26
    相关资源
    最近更新 更多