Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 本机查询-如何从数据库中检索实体的特定列_Hibernate_Nativequery - Fatal编程技术网

Hibernate 本机查询-如何从数据库中检索实体的特定列

Hibernate 本机查询-如何从数据库中检索实体的特定列,hibernate,nativequery,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">

在我的数据库中,我创建了一个带有列的表主题

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>
根本原因

com.microsoft.sqlserver.jdbc.SQLServerException: The column name id is not valid
com.microsoft.sqlserver.jdbc.SQLServerException: The column name id1_5_0_ is not valid
因此,我尝试将结果集更改为以下内容:

<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>
<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>
有着非常奇怪的根源

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


我不能只从DB中检索几个列,并仅用它们形成主题?如果Subject的其余属性为null,这对我来说没关系——我希望完全使用Subject,而不是值列表或值数组列表或类似的东西。

您可以使用带有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