Почему этот HQL недействителен? - PullRequest
3 голосов
/ 03 июня 2011

Ошибка: Ошибка: org.hibernate.QueryException: может генерировать идентификаторы только как часть массовой вставки с генератором последовательности или стиля после вставки

HQL:

insert into CategoryProduct (category, product) 
select c, p from Category c, Product p 
where c.id = 252 and p.id = 554

Категория Product представляет собой объект со встроенным идентификатором:

@EmbeddedId
protected CategoryProductPK categoryProductPK;

Заранее спасибо!

1 Ответ

1 голос
/ 09 июня 2011

Исключение, похоже, выдается из org.hibernate.hql.ast.HqlSqlWalker в:

IdentifierGenerator generator = persister.getIdentifierGenerator();
if ( !supportsIdGenWithBulkInsertion( generator ) ) {
    throw new QueryException( "can only generate ids as part of bulk insert with either sequence or post-insert style generators" );
}

и решение принимается на

public static boolean supportsIdGenWithBulkInsertion(IdentifierGenerator generator) {
    return SequenceGenerator.class.isAssignableFrom( generator.getClass() )
        || PostInsertIdentifierGenerator.class.isAssignableFrom( generator.getClass() );
}

Итак, похоже, что Hibernate ожидает, что вы используете генератор с подтипом SequenceGenerator или PostInsertIdentifierGenerator. Какой генератор вы используете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...