Извлечение множества и свойств «многие ко многим» через HQL - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть такие классы:

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 для запроса таблицы соединений.

1 Ответ

1 голос
/ 22 февраля 2012
select entry.id, category.id from EntryDB entry 
left join entry.cats category
...