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