Написание HQL-запроса с отображением «многие к одному»

1

Мне нужно написать следующий 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)

Помогите мне написать правильный запрос для этого же. благодаря

Теги:
hibernate
jpa
hql
java-ee

1 ответ

1

Вы можете использовать INSERT/SELECT в HQL, но в вашем запросе есть некоторые проблемы:

  1. Вам не нужно использовать псевдоним в вставке в список. Там вы указываете свойства объекта, которые вы собираетесь установить с помощью вашего запроса выбора. Вставка и выбор должны работать с одинаковым количеством столбцов.
  2. "Select: new_appl" является незаконным, поскольку параметры действительны только в предложении where.
  3. Вы можете сохранить псевдоним для выбранного запроса, но не переносите его на вставку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню