Hibernate 检查是否等于两个不相关的列

Hibernate check equal of two unrelated column

我有如下示例实体

class Book{
  int id
  String name
  int sid
}

class Author {
   int id
   String name
   List<Book> books
   int mid
}

不是很好的设计,我知道只是想解释一个场景。

现在我的问题是,有什么方法可以检查两个不相关的列是否相等

例如

session.createCriteria(Author.class, "author")
       .createAlias("books", "book")
       .add(Restrictions.eq("author.mid","book.sid")
       .list()

能做到吗?

我认为 Criteria API 不支持加入不相关的实体。尝试如下使用 HQL 而不是 Criteria API。

session.createQuery("from Book as book INNER JOIN Author as author WHERE book.sid = author.mid").list();

我认为不需要Restrictions.eq("author.mid","book.sid")。希望对你有帮助。

正常Sql语句:

SELECT A.*, B.* FROM Author A, Books b WHERE A.ID=B.id ;

加入条件:

Criteria criteria = session.createCriteria(Author.class);
    criteria.setFetchMode("books", FetchMode.JOIN)
    List list = criteria.list();

如果您有进一步的限制,则必须添加限制

 .add(Restrictions.eq("id", 2));

Example Criteria

Subquery-Criteria

Similar issue

这可能不是推荐的方式,但 Restriction.sqlRestriction 为我提供了所需的输出

session.createCriteria(Author.class, "author")
       .createAlias("books", "book")
       .add(Restrictions.sqlRestriction("author.mid","book.sid")
       .list()