Why is this HQL not valid?

Error: Error: org.hibernate.QueryException: can only generate identifiers as part of a bulk insert using sequence or post-insert style generators

HQL:

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

The Product category is an object with a built-in identifier:

@EmbeddedId
protected CategoryProductPK categoryProductPK;

Thanks in advance!

+3
source share
1 answer

The exception seems to be thrown from org.hibernate.hql.ast.HqlSqlWalkerat:

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" );
}

and the decision was made on

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

So, it seems that Hibernate expects you to use a generator with a subtype of SequenceGeneratoror PostInsertIdentifierGenerator. Which generator do you use?

+1
source

All Articles