休眠和子树异常的意外结束

2022-09-01 16:47:02

我是Hibernate的新手。

我有一个POJO,其中包含一个由标签组成的POJO。标签包含在表中的另一个数据库表中,因此我执行联接以填充 pojo。ItemSet<String>Item

我正在尝试运行一个简单的示例查询,来自“Java Persistance with Hibernate”一书中,我在其中查询。只是,由于某种原因,我得到了一个from Item item where 'hello' member of item.labels

 `org.hibernate.hql.ast.QuerySyntaxException: unexpected end of subtree[from /*qualified class path*/.Item item where 'hello' member of item.labels]`

可能导致此问题的原因是什么?

这是我的POJO:

public class Item
       private int uuid;
       private Set<String>labels = new HashSet<String>();

       @Id
       public int getUuid(){
          return uuid; 
       }

       @CollectionOfElements
       @JoinTable(name="labels", joinColumns=@JoinColumn(name="uuid"))
       @Column(name="label")
       public Set<String> getLabels(){
            return labels;
       }
 }

答案 1

从谷歌搜索中可以看出,您的参数集合可能是空的。我会在调用查询之前添加一个空检查。

教训是,谷歌是你的朋友。当您无法找出错误消息时,请尝试将其输入Google(或您喜欢的引擎)。你不太可能是第一个被它迷惑的人。


答案 2

对于基元集合,您应该使用 HQL 查询,如下所示:

from Item item join item.labels lbls where 'hello' in (lbls)

PS:“加入”是必需的,因为“标签”是 OneToMany or ManyToMany 变体,括号是必需的,因为“lbls”是一个集合


推荐