2015-02-17 3 views
1

В Eclipse с использованием Hibernate с базой данных MySQL, У меня многие ко многим отношений между двумя таблицами Profile и Fonctionnalite и результирующей таблицей был T_PROFILE_FONCTIONNALITE с составным первичным ключом. Я хочу вставить новую запись в T_PROFILE_FONCTIONNALITE.Hibernate HQL Query вставить

Это соответствующие классы в файле hbm.xml:

<class name="Fonctionnalite" table="T_FONCTIONNALITE" dynamic-update="false" dynamic-insert ="false"> 
    <id name="code" column="CODE" type="java.lang.String"/> 
    <property name="libelle" column="LIBELLE" type="java.lang.String"/> 
    <property name="url" column="URL" type="java.lang.String"/> 
    <bag name="profiles" cascade="none" table="T_PROFILE_FONCTIONNALITE" lazy ="true" inverse="true"> 
     <key column="CODE_FONCTIONNALITE" /> 
     <many-to-many class="Profile" column="CODE_PROFILE" unique="true"/> 
    </bag> 
</class> 

<class name="Profile" table="T_PROFILE" dynamic-update="true"> 
    <id name="code" column="CODE" type="java.lang.String"/> 
    <property name="libelle" column="LIBELLE" type="java.lang.String"/> 
    <property name="estFonctionnalitesUpdate" column="UPDATED" type="yes_no"/> 
    <bag name="menus" cascade="all" table="T_PROFILE_FONCTIONNALITE" lazy ="true" inverse="true"> 
     <key column="CODE_PROFILE" /> 
     <many-to-many class="Fonctionnalite" column="CODE_FONCTIONNALITE" unique="true" where="URL is not null" /> 
    </bag> 
</class> 

Я попытался добавить следующую организацию для таблицы T_PROFILE_FONCTIONNALITE:

<class name="proFonc" table="T_PROFILE_FONCTIONNALITE" dynamic-update="false" dynamic-insert ="false"> 
    <composite-id> 
     <key-many-to-one name="codepro" entity-name="Profile" foreign-key="code" column="CODE_PROFILE"></key-many-to-one> 
     <key-many-to-one name="codefonc" entity-name="Fonctionnalite" foreign-key="code" column="CODE_FONCTIONNALITE"></key-many-to-one> 
     </composite-id> 
</class> 

Я получил это исключение:

An association from the table T_PROFILE_FONCTIONNALITE refers to an unmapped class: Fonctionnalite 

Другой проблемой является h чтобы написать сам запрос.

Это метод предпочитаемого here

String hql = "INSERT INTO Employee(firstName, lastName, salary)" + 
      "SELECT firstName, lastName, salary FROM old_employee"; 
Query query = session.createQuery(hql); 
int result = query.executeUpdate(); 
System.out.println("Rows affected: " + result); 

Но я имел обыкновение делать запросы с параметрами, как:

<query name="insertpf" type="hql" > 
    <body> 
    <![CDATA[ 
     insert into proFonc values 
    ]]> 
    </body> 
    <body param="proid"> 
    <![CDATA[ 
     (proid , 
      ]]> 
    </body> 
    <body param="foncid"> 
    <![CDATA[ 
     foncid) 
      ]]> 
    </body> 
</query> 

Конечно, это синтаксический неправильно, потому что я создал его, пожалуйста, помогите мне если я не использую select, ни сеанс, чтобы получить значения, которые нужно вставить, потому что я их в переменных. спасибо.

ответ

0

Это было решение моей проблемы:

НЕ НАДО ДОБАВЛЯТЬ УЧРЕЖДЕНИЯ !, НЕ НАДО ДОБАВИТЬ ЗАПРОС !. ИСПОЛЬЗОВАНИЕ saveOrUpdate.

В дао/спящий режим/modeldaoimpl.java У меня есть этот метод:

public void saveOrUpdate(final Object entity) throws DaoException{ 
    try { 
     getHibernateTemplate().saveOrUpdate(entity); 
    } catch (Exception e) { 
     throw new DaoException(e); 
    } 

} 

Этот метод обновляет каждый субъект берет свои отношения с другими организациями в рассмотрении. Так что заполните только profile объект с его fonctionalities (посмотрите на тег bag в вопросе profile) и позвоните по этому методу.

В моем интерфейсе службы безопасности:

public ResultatDTO saveProfil(ProfileDTO profilDTO, Integer idUser) 
     throws ServiceExecutionException; 

реализации:

public ResultatDTO saveProfil(Profile pr, Integer idUser) 
     throws ServiceExecutionException { 
    ResultatDTO resultatDTO = new ResultatDTO(); 
    try { 
     pr.addAllMenus(getfucs(pr)); //fill your entity (`bag` menus). 

     modelDao.saveOrUpdate(profil);// call saveorupdate 

     resultatDTO.setResult(//obj); 
     return resultatDTO; 

    } catch (Exception e) { 
     throw new ServiceExecutionException(e); 
    } 
} 

тела:

public void saveOrUpdate(final Object entity) throws DaoException{ 
    try { 
     getHibernateTemplate().saveOrUpdate(entity); 
    } catch (Exception e) { 
     throw new DaoException(e); 
    } 

}.