2016-02-22 3 views
2

Я столкнулся с спящими именованными запросами и преобразован в bean.PropertyNotFoundException: Не удалось найти setter для column_name в классе

Вот код:

query = session.getNamedQuery("LAST_ADDED_DOC"); 
query.setString("module", inNpUploads.getModuleName()); 
query.setString("mapping", inNpUploads.getMappingId()); 
query.setResultTransformer(Transformers.aliasToBean(NpUploads.class)); 
dmsDb = query.list(); 

но исключение для query.list():

org.hibernate.PropertyNotFoundException: Could not find setter for doc_id on class com.np.upload.pojo.NpUploads 
    at org.hibernate.property.ChainedPropertyAccessor.getSetter(ChainedPropertyAccessor.java:44) 
    at org.hibernate.transform.AliasToBeanResultTransformer.transformTuple(AliasToBeanResultTransformer.java:57) 
    at org.hibernate.hql.HolderInstantiator.instantiate(HolderInstantiator.java:69) 
    at org.hibernate.loader.custom.CustomLoader.getResultList(CustomLoader.java:330) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) 
    at org.hibernate.loader.Loader.list(Loader.java:2099) 
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289) 
    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695) 
    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142) 
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152) 
    at com.np.upload.manager.FileUploadManager.listUploadedFiles(FileUploadManager.java:116) 
    at com.np.upload.spring.controller.FileUploadController.prepareUploadPage(FileUploadController.java:222) 
    at com.np.upload.spring.controller.FileUploadController.uploadPage(FileUploadController.java:84) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 

HBM:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Sep 30, 2015 10:32:57 PM by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
    <class name="com.np.upload.pojo.NpUploads" table="np_document_uploads" dynamic-update="true"> 
     <id name="docId" type="java.lang.Integer"> 
      <column name="doc_id" /> 
      <generator class="identity" /> 
     </id> 
     <version name="version" type="java.lang.Integer"> 
      <column name="version" /> 
     </version> 
     <property name="moduleName" type="string"> 
      <column name="module_name" not-null="true" /> 
     </property> 
     <property name="mappingId" type="string"> 
      <column name="mapping_id" not-null="true" /> 
     </property> 
     <property name="docType" type="string"> 
      <column name="doc_type" not-null="true" /> 
     </property> 
     <property name="docName" type="string"> 
      <column name="doc_name" not-null="true" /> 
     </property> 
     <property name="docPath" type="string"> 
      <column name="doc_path" length="1024" not-null="true" /> 
     </property> 
     <property name="createdTime" type="timestamp" insert="false" update="false"> 
      <column name="created_time" length="19" /> 
     </property> 
     <property name="modifiedTime" type="timestamp" insert="false" update="false"> 
      <column name="modified_time" length="19" /> 
     </property> 
    </class> 
    <sql-query name="LAST_ADDED_DOC"> 
     <![CDATA[SELECT d.* FROM np_document_uploads d 
       JOIN(
        SELECT module_name, mapping_id, doc_type, max(version) AS version 
        FROM np_document_uploads u 
        WHERE u.module_name=:module and u.mapping_id=:mapping 
        GROUP BY module_name, mapping_id, doc_type 
       )tt USING(module_name, mapping_id, doc_type, version) 
       WHERE d.module_name=:module and d.mapping_id=:mapping]]> 
    </sql-query> 
</hibernate-mapping> 

и POJO:

public class NpUploads 
    implements java.io.Serializable 
{ 
    private static final long serialVersionUID = -5063169354511880324L; 
    private Integer   docId; 
    private Integer   version; 
    private String   moduleName; 
    private String   mappingId; 
    private String   docType; 
    private String   docName; 
    private String   docPath; 
    private Date    createdTime; 
    private Date    modifiedTime; 

    // getter and setters for all properties are there. 
} 

Схема базы данных:

+---------------+---------------+------+-----+-------------------+-----------------------------+ 
| Field   | Type   | Null | Key | Default   | Extra      | 
+---------------+---------------+------+-----+-------------------+-----------------------------+ 
| doc_id  | int(11)  | NO | PRI | NULL    | auto_increment    | 
| module_name | varchar(255) | NO |  | NULL    |        | 
| mapping_id | varchar(255) | NO |  | NULL    |        | 
| doc_type  | varchar(255) | NO |  | NULL    |        | 
| doc_name  | varchar(255) | NO |  | NULL    |        | 
| doc_path  | varchar(1024) | NO |  | NULL    |        | 
| version  | int(6)  | YES |  | NULL    |        | 
| created_time | timestamp  | YES |  | CURRENT_TIMESTAMP |        | 
| modified_time | timestamp  | YES |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
+---------------+---------------+------+-----+-------------------+-----------------------------+ 

ответ

0

Как вы используете Transformers.aliasToBean, который использует имена псевдонимов, чтобы найти методы инкубационных вашего resultClass (NpUploads)

Для того, чтобы работать должным образом Transformers.aliasToBean вам нужно использовать собственные имена псевдонимов в запросе. Если имя свойства в вашем классе NpUploads составляет docId, вы должны использовать select doc_id as docId.

Удалить d.* в запросе и использовать отдельный столбец с соответствующими псевдонимами

Modify ниже и проверьте link для справки:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Sep 30, 2015 10:32:57 PM by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
    <class name="com.np.upload.pojo.NpUploads" table="np_document_uploads" dynamic-update="true"> 
     <id name="docId" type="java.lang.Integer"> 
      <column name="doc_id" /> 
      <generator class="identity" /> 
     </id> 
     <version name="version" type="java.lang.Integer"> 
      <column name="version" /> 
     </version> 
     <property name="moduleName" type="string"> 
      <column name="module_name" not-null="true" /> 
     </property> 
     <property name="mappingId" type="string"> 
      <column name="mapping_id" not-null="true" /> 
     </property> 
     <property name="docType" type="string"> 
      <column name="doc_type" not-null="true" /> 
     </property> 
     <property name="docName" type="string"> 
      <column name="doc_name" not-null="true" /> 
     </property> 
     <property name="docPath" type="string"> 
      <column name="doc_path" length="1024" not-null="true" /> 
     </property> 
     <property name="createdTime" type="timestamp" insert="false" update="false"> 
      <column name="created_time" length="19" /> 
     </property> 
     <property name="modifiedTime" type="timestamp" insert="false" update="false"> 
      <column name="modified_time" length="19" /> 
     </property> 
     <loader query-ref="LAST_ADDED_DOC"/> 
    </class> 
    <sql-query name="LAST_ADDED_DOC"> 
     <return alias="up" class="NpUploads"/>  
     <![CDATA[SELECT d.doc_id as {up.docId},d.module_name as {up.moduleName},d.mapping_id as {up.mappingId},d.doc_type as {up.docType},d.doc_name as {up.docName},d.version as {up.version},d.doc_path as {up.docPath},d.created_time as {up.createdTime},d.modified_time as {up.modifiedTime} FROM np_document_uploads d 
      JOIN(
       SELECT module_name, mapping_id, doc_type, max(version) AS version 
       FROM np_document_uploads u 
       WHERE u.module_name=:module and u.mapping_id=:mapping 
       GROUP BY module_name, mapping_id, doc_type 
      )tt USING(module_name, mapping_id, doc_type, version) 
      WHERE d.module_name=:module and d.mapping_id=:mapping]]> 
    </sql-query> 
</hibernate-mapping> 
+0

Я изменил 'd. *' На 'd.doc_id как docId, d.module_name как moduleName, d.mapping_id как mappingId, d.doc_type как docType, d.doc_name как docName, d.version, d.doc_path как docPath, d.created_time как createdTime, d.modified_time как modifiedTime', и теперь исключение говорит: 'IntegerType] - не удалось прочитать значение столбца из набора результатов: doc_id; Столбец doc_id не найден. JDBCExceptionReporter] - Ошибка SQL: 0, SQLState: S0022 JDBCExceptionReporter] - Столбец «doc_id» не найден » –

+0

[здесь] (http://pastebin.com/ECnmyQWC) полный журнал ошибок –

+0

check link http://stackoverflow.com/questions/7118703/query-using-alias-on-column-give-an-error –

0

этот ответ ищет horrable, но я столкнулся такая же проблема. некоторое время hibernate не обнаруживает свойства setter и getter. Я решил эту проблему, удалив все сеттеры и геттеры из bean-компонента, а затем снова создав их с помощью eclipse shorcut. это работает. вы можете сделать то же самое.

+0

пробовал это, но не повезло ... проблема, похоже, связана с именованным запросом. –

+0

запустить тот же запрос в консоли базы данных – Musaddique

+0

запрос работает отлично в консоли базы данных. –

0

The types declared and used in the mapping files are neither Java data types nor SQL database types. Instead, they are Hibernate mapping types. Hibernate mapping types are converters which translate between Java and SQL data types.

Так java.lang.Integer является тип Java не спящий режим отображения тип, см. Hibernate types

Попробуйте изменить java.lang.Integer до integer

<id name="docId" type="integer"> 
    <column name="doc_id" /> 
    <generator class="identity" /> 
</id> 
+0

все те же исключения. –

+0

Можете ли вы показать нам собирателей сеттеров? –

+0

http://pastebin.com/DMCxpa1z –

Смежные вопросы