我有以下示例实体
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()
能做到吗?
答案 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));
答案 2 :(得分:1)
这可能不是推荐的方法,但是Restriction.sqlRestriction
为我工作以获得所需的输出
session.createCriteria(Author.class, "author")
.createAlias("books", "book")
.add(Restrictions.sqlRestriction("author.mid","book.sid")
.list()