Hibernate:我如何编写 HQL 来获取实体的记录,而没有记录其识别关系

Posted

技术标签:

【中文标题】Hibernate:我如何编写 HQL 来获取实体的记录,而没有记录其识别关系【英文标题】:Hibernate: How do I write the HQL for getting records of an entity without records for its identifying relation 【发布时间】:2010-09-10 12:10:38 【问题描述】:

我将 Hibernate 对象定义为

Class SomeText
  private Long textId;
  private Set<Tag> Tags = new HashSet<Tag>();

  @ManyToMany(cascade=CascadeType.PERSIST,CascadeType.MERGE )
  @JoinTable(name = "text_tag_reln",
   joinColumns =  @JoinColumn(name = "textId") ,
   inverseJoinColumns =  @JoinColumn(name = "tagId") )
    public Set<Tag> getTags() 
        return Tags;
    


Class Tag
  private long tagId;

我现在想要获取所有没有任何标签的 SomeText 对象。我写了以下HQL,但它不起作用。

select st from SomeText as st where st.Tags = null

我该怎么做才能获得这些记录。在 SQL 世界中,我会编写一个查询,该查询将从 text_tag_reln 表中获取所有不同的 textId,并获取该集合中不存在的所有 SomeText id。如何在 HQL 中做到这一点?

【问题讨论】:

您在创建对象时将 Tags 设置为 new HashSet(),它怎么可能为 null? 【参考方案1】:

你试过了吗

select st from SomeText as st where st.Tags is empty

另请参阅:

Chapter 14. HQL: The Hibernate Query Language

【讨论】:

啊!一个两个字的答案,我在任何地方都找不到。非常感谢!

以上是关于Hibernate:我如何编写 HQL 来获取实体的记录,而没有记录其识别关系的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate HQL - 从今天开始获取实体的下一个日期

Hibernate HQL:当且仅当所有子实体都具有相同值的属性时,如何选择父实体?

HQL Hibernate INNER JOIN

在 HQL 中加入无关联

Hibernate HQL Join 与复合键

Hibernate 实体管理器 find() 仍然可以检索删除 hql 的实体