本机查询 - 如何仅从DB for Entity中检索特定列

时间:2017-05-17 10:00:36

标签: hibernate nativequery

在我的数据库中,我给表格主题

id (long)
name (String)
ifActive (0 or 1)
text (very long String)

在我的网页中,我必须显示活动主题的名称列表。所以我在xml文件中声明了以下本机查询:

<sql-result-set-mapping name="SubjectResult">
    <entity-result entity-class="com.test.Subject">
        <field-result name="id" column="id"/>
        <field-result name="name" column="name"/>
        <field-result name="ifActive" column="ifActive"/>
        <field-result name="text" column="text"/>
    </entity-result>
</sql-result-set-mapping>

<entity class= "com.test.Subject" name= "Subject">
    <named-native-query name="findAllActiveSubject"
                        result-set-mapping="SubjectResult">
        <query>
            select
                *
            from 
                Subject
            where 
                ifActive = 1
        </query>
    </named-native-query>
</entity>

它工作正常 - 我获得了Subject对象的列表,我可以形成Active Subjects的名单。 但问题是:文本列中的文本很长,我不需要从DB中检索它以形成活动主题的名称列表 - 我真的只需要主题的名称。

所以我将SQL查询更改为以下内容:

<sql-result-set-mapping name="SubjectResult">
    <entity-result entity-class="com.test.Subject">
        <field-result name="id" column="id"/>
        <field-result name="name" column="name"/>
        <field-result name="ifActive" column="ifActive"/>
        <field-result name="text" column="text"/>
    </entity-result>
</sql-result-set-mapping>

<entity class= "com.test.Subject" name= "Subject">
    <named-native-query name="findAllActiveSubject"
                        result-set-mapping="SubjectResult">
        <query>
            select
                name
            from 
                Subject
            where 
                ifActive = 1
        </query>
    </named-native-query>
</entity>

我得到例外

org.hibernate.exception.GenericJDBCException: could not execute query

有根本原因

com.microsoft.sqlserver.jdbc.SQLServerException: The column name id is not valid

所以我尝试将结果集更改为以下内容:

<sql-result-set-mapping name="SubjectResult">
    <entity-result entity-class="com.test.Subject">
        <field-result name="name" column="name"/>
    </entity-result>
</sql-result-set-mapping>

<entity class= "com.test.Subject" name= "Subject">
    <named-native-query name="findAllActiveSubject"
                        result-set-mapping="SubjectResult">
        <query>
            select
                name
            from 
                Subject
            where 
                ifActive = 1
        </query>
    </named-native-query>
</entity>

我得到例外

org.hibernate.exception.GenericJDBCException: could not execute query

带有非常奇怪的根本原因

com.microsoft.sqlserver.jdbc.SQLServerException: The column name id1_5_0_ is not valid

所以......

我只能从数据库中删除几个colums并仅用它们形成主题?如果Subject的其余属性为null,我可以使用它 - 我想完全使用Subject而不是值列表或值数组列表或类似的东西。

1 个答案:

答案 0 :(得分:0)

您可以使用具有HQL的特定构造函数

在Subject.java中创建构造函数

...
public Subject() {
}

public Subject(String name) {
    this.name = name;
}
...

select的查询应为

select new Subject(s.name) from Subject s where s.ifActive=1
相关问题