java - 使用多对一映射编写插入 HQL 查询

标签 java hibernate jakarta-ee jpa hql

我需要将以下 SQL 查询编写为 HQL

insert into aab_appl_training tr  (tr.training_id,tr.appl_id,tr.course_name,tr.completed_dt,tr.cert_by,tr.cert_num,tr.train_comp)
select aab_appl_training_seq.nextval,'10071',tr.course_name,tr.completed_dt,tr.cert_by,tr.cert_num,tr.train_comp 
from aab_appl_training tr
where tr.appl_id=10018 

我的困境是,在我的映射文件中,我将 AABApplication 作为多对一映射到 aab_appl_training 表

<hibernate-mapping>
<class name="org.sae.model.aab.AABTraining" table="AAB_APPL_TRAINING" schema="CMS">
    <id name="trainingId" type="java.lang.Long">
        <column name="TRAINING_ID" precision="10" scale="0" />
        <generator class="sequence">
        <param name="sequence">AAB_APPL_TRAINING_SEQ</param></generator>
    </id>
    <many-to-one name="AABApplication" class="org.sae.model.aab.AABApplication" fetch="select">
        <column name="APPL_ID" precision="10" scale="0" not-null="true" />
    </many-to-one>

我为此编写的 HQL 是

String hql="insert into AABTraining (tr.applId,tr.courseName,tr.completedDt,tr.certBy,tr.certNum,tr.trainComp)"+" "+"select :new_appl,tr.courseName,tr.completedDt,tr.certBy,tr.certNum,tr.trainComp"+" "+ 
"from AABTraining tr "+" "+"where tr.applId=:orig_appl" ;

但是为此我得到了

的异常
[ERROR][2014-06-02 15:28:03,082] [] [AAB] [PARSER] []  <AST>:1:28: unexpected AST node: .[ERROR][2014-06-02 15:28:03,083] [] [AAB] [AABRepositoryImpl] []  org.hibernate.QueryException: could not resolve property:  of:org.sae.model.aab.AABTraining [insert into AABTraining (tr.applId,tr.courseName,tr.completedDt,tr.certBy,tr.certNum,tr.trainComp) select :new_appl,tr.courseName,tr.completedDt,tr.certBy,tr.certNum,tr.trainComp from org.sae.model.aab.AABTraining tr  where tr.applId=:orig_appl]
at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyException(AbstractPropertyMapping.java:43)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:37)
at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1282)

请帮助我编写正确的查询。 谢谢

最佳答案

您可以使用INSERT/SELECT在 HQL 中,但您的查询有一些问题:

  1. 您不需要在插入列表中使用任何别名。您可以在此处指定要使用选择查询设置的实体属性。插入和选择都应该对相同数量的列进行操作。
  2. “select :new_appl”是非法的,因为参数仅在 where 子句中有效。
  3. 您可以保留选择查询的别名,但不要将其转移到插入查询。

关于java - 使用多对一映射编写插入 HQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24001951/

相关文章:

java - HibernateTemplate 更新查询

java - 在 Weblogic Server 中设置 Java 堆空间

JavaEE - EJB over SSL 仅当客户端和服务器位于同一主机时才有效

java - 为什么 JPA 不自动为我的行生成一个 id?

Java - Jackson JSON 库和 ObjectMapper.readValue

java - 通过 Eclipse 的 SVN - 无法运行我 checkout 的代码

java - JPA - 检查另一个表中是否存在 boolean 值值

java - Spring Boot 配置文件 - 运行 sql 脚本而不是 ddl-auto

Java 正则表达式不匹配 ascii 范围之外,行为不同于 python 正则表达式

java - 从服务中连续运行的线程发布通知