У меня есть такие классы:
class EntryDB {
@Id @GeneratedValue
int id;
@ManyToMany(cascade = CascadeType.ALL)
List<Category> cats;
}
class Category {
@Id @GeneratedValue
int id;
String name;
}
Таким образом, каждая запись может быть в нулевой или нескольких категориях.Работает нормально.Но мне нужно получить список записей в формате entry_id -> (cat_id, cat_id, cat_id)
Я пытаюсь
select id, cats from EntryDB
, но это не работает, и я вижу исключения как:
ВЫХОД ОТЛАДКИ: Hibernate: выберите entrydb0_.id как col_0_0_, {не определенное-свойство-ref} как col_1_0_, category2_.id как id1_, category2_.name как name1_ из my_entry_table entrydb0_ внутренней записи entrydb_category1.id = category1_.id внутреннее объединение категории category2_ на Categories1_.id = category2_.id
org.hibernate.exception.SQLGrammarException: could not execute query
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL serve...near 'as col_1_0_, category2_.id as id1_, category2_.name as name1_ from my_entry_table' at line 1
Но HQL, подобный
"select cats from EntryDB"
, работает нормально.Но мне нужно знать идентификаторы записей.
Просто использовать
session.load(EntryDB.class, id).getCats();
не вариант, потому что "настоящий" EntryDB ОЧЕНЬ тяжел и я просто хочу знать ", какие записив какой категории ".Было бы очень просто, если бы я мог получить прямой доступ к таблице соединений, но это не может быть сделано в HQL.
Может быть, вы знаете какой-то обходной путь, но используете JDBC для запроса таблицы соединений.