休眠检查等于两个无关列

时间:2018-09-17 12:24:13

标签: hibernate criteria hibernate-criteria

我有以下示例实体

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()

能做到吗?

3 个答案:

答案 0 :(得分:1)

我认为Criteria API不支持联接无关的实体。尝试按以下方式使用HQL而不是Criteria API。

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

答案 1 :(得分:1)

我认为不需要 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

答案 2 :(得分:1)

这可能不是推荐的方法,但是Restriction.sqlRestriction为我工作以获得所需的输出

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