java - 为什么这个 HQL 无效?

标签 java sql hibernate hql

错误是: 错误:org.hibernate.QueryException:只能使用序列或插入后样式生成器生成 ID 作为批量插入的一部分

总部:

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

categoryProduct 是一个嵌入了 Id 的实体:

@EmbeddedId
protected CategoryProductPK categoryProductPK;

提前致谢!

最佳答案

异常似乎是从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 似乎希望您使用的生成器是 SequenceGeneratorPostInsertIdentifierGenerator 的子类型。你用的是什么发电机?

关于java - 为什么这个 HQL 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6220594/

相关文章:

java - 将另一个程序的输出打印到 java 文本区域

java - Selenium Cucumber Java 范围报告

SQL 存储过程除法四舍五入

SQL Server : Cursor to CTE almost there

java - 绘制二维图形

Java - 非文件错误

mysql - 将多个查询与一个标准列组合

java - 集合元素(多对多)表别名不能为空

java - 为什么我在运行模式下得到 HibernateProxy 对象,但在 Debug模式下得到域。这是怎么发生的

hibernate - 同时对 hibernate 和 mongodb 域类进行 Elasticsearch - Grails