我面对的是名为query和transform to bean的hibernates。
代码如下:

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)

哈佛商学院:
<?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>

还有波乔:
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 |
+---------------+---------------+------+-----+-------------------+-----------------------------+

最佳答案

当您使用Transformers.aliasToBean时,它使用别名来查找resultClass(NpUploads)的setter方法
为了使Transformers.aliasToBean正常工作,您需要在查询中使用正确的别名。如果NpUploads类中的属性名是docId,则应使用select doc_id as docId
删除查询中的d.*,并使用具有适当别名的单个列
修改以下内容并选中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>

10-04 13:18