Проверка гибернации равна двум несвязанным столбцам - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть пример объекта следующим образом

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 голосов
/ 17 сентября 2018

Мне кажется, не требуется 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));

Пример Критерии

Критерии подзапроса

Аналогичная проблема

0 голосов
/ 18 сентября 2018

Вероятно, это не рекомендуемый способ, но Restriction.sqlRestriction работал для меня, чтобы получить желаемый результат

session.createCriteria(Author.class, "author")
       .createAlias("books", "book")
       .add(Restrictions.sqlRestriction("author.mid","book.sid")
       .list()
0 голосов
/ 17 сентября 2018

По моему мнению, Criteria API не поддерживает объединение не связанных между собой объектов.Попробуйте использовать HQL следующим образом вместо Criteria API.

session.createQuery("from Book as book INNER JOIN Author as author WHERE book.sid = author.mid").list();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...