2013-12-12 6 views
0

У меня есть 2 таблицы Asset и Asset_Dist_Types. Атрибут - родительский, а Asset_Dist_Types - дочерняя таблица. Asset_Dist_Types имеет 2 столбца asset_id и lkp_dist_type, где asset_id является первичным ключом в таблице Asset. В Asset_Dist_Types это много-много (у одного объекта asset_id может быть несколько записей lkp_dist_type.) В java у нас есть класс сущности только для таблицы Asset. В этом для Asset_Dist_Type они упоминают его как коллекцию элементов. В Asset.java запись для Asset_Dist_Type выглядит следующим образом.HQL Query не исполняется

@CollectionOfElements 
    @JoinTable(name = "ASSET_DIST_TYPE", joinColumns = @JoinColumn(name="ASSET_ID")) 
    @Column(name="LKP_DIST_TYPE") 
    private Set<Integer> distTypes = new LinkedHashSet<Integer>(0); 

Теперь я хотел бы обновить столбец lkp_dist_type Asset_Dist_Type таблицы. У меня есть список идентификаторов активов. Я написал следующий запрос для его обновления.

int hql = entityManager.createQuery(
    "update Asset a set a.distTypes = :distTypeParamId where a.assetId in (:assetIdParam)") 
.setParameter("distTypeParamId", distTypeList) 
.setParameter("assetIdParam", assetIdListToUpdateLOB) 
.executeUpdate(); 

Но это бросает

javax.persistence.PersistenceException: 
org.hibernate.exception.GenericJDBCException: could not execute update query. 

Поскольку я новичок в спящий режим я не получаю то, что это решение. Может кто-нибудь, пожалуйста, помогите мне?

+0

Может кто-нибудь помочь ..? !!! – Sanjay

+0

В вашей конфигурации Hibernate ('hibernate.cfg.xml') вы можете добавить' true ', а затем все сгенерированные операторы SQL регистрируются на консоли. Это уже может помочь вам, и вы можете скопировать этот оператор в терминал SQL и выполнить его там, чтобы увидеть, какую ошибку он производит. Если у вас все еще есть проблемы, PLS. опубликовать сообщение о состоянии и ошибке при выполнении в терминале. – Johanna

+0

Спасибо Johanna за ответ ..! Я пошел по другому пути и закончил. – Sanjay

ответ

0

Решил это, следуя по-другому. Я получил список идентификаторов активов и список типов распространения. Я повторил список идентификаторов активов и для каждого идентификатора ресурса я добавил список типов распространения и сбросил его. Он работает сейчас ..!

После получения списка идентификатор объекта в

for(int i=0;i<assetIdListToUpdateLOB.size();i++){ 

       int assetId = assetIdListToUpdateLOB.get(i); 
       System.out.println(assetId); 
       List<Asset> assetDetailsList = entityManager 
       .createQuery(
         "select distinct asset from Asset asset " 
           + "left join fetch asset.distTypes dt " 
           + "where asset.assetId = :assetIdParam") 
       .setParameter("assetIdParam", assetId).getResultList(); 
       if(assetDetailsList.size()>0){ 
       this.asset = assetDetailsList.get(0); 
       asset.getDistTypes().clear(); 
       asset.getDistTypes().addAll(selectedDistributionTypes); 
       entityManager.flush(); 
} 
}