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));
Similar issue
这可能不是推荐的方式,但 Restriction.sqlRestriction
为我提供了所需的输出
session.createCriteria(Author.class, "author")
.createAlias("books", "book")
.add(Restrictions.sqlRestriction("author.mid","book.sid")
.list()
我有如下示例实体
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));
Similar issue
这可能不是推荐的方式,但 Restriction.sqlRestriction
为我提供了所需的输出
session.createCriteria(Author.class, "author")
.createAlias("books", "book")
.add(Restrictions.sqlRestriction("author.mid","book.sid")
.list()