将 SQLquery 映射到普通对象,而不是实体
mapping SQLquery to plain Object, not Entity
我有以下 Java 方法:
public void loadData()
{
session = DaoSF.getSessionFactory().openSession();
String sql = "select s.column1, SUM(s.column2), 'hi' as column3 from Source s group by s.column1";
Query query = session.createSQLQuery(sql).addEntity(Test.class);
dataList = query.list();
}
Class 来源:
@Entity
@Table(name="SourceTable")
public class Source implements Serializable
{
@Id
private int column1;
private int column2;
+ getters and setters
}
适当class测试:
@Entity // why?
public class Test implements Serializable
{
@Id
private int column1;
private int column2;
private String column3;
+ getters and setters
}
和休眠映射:
...
<mapping class="objects.Test"/> // why?
<mapping class="tables.Source"/>
...
一切正常,但我不明白一件事:
为什么对象 Test
必须映射到 hibernate.xml
并由 @Entity
标记签名,如果它在真正的 SQL 服务器中没有反射?为什么它不能是 'plain' Java 对象?
当我删除 @Entity
和 <mapping class="objects.Test"/>
时,它报告以下错误:
org.hibernate.MappingException: Unknown entity: objects.Test
它不一定是,但由于 hibernate 正在调用 entity query
,您已经明确地将其标记为实体。
Query query = session.createSQLQuery(sql).addEntity(Test.class);
你应该做的是 return a non-managed entity in a query 所以写一些像
Query query = session.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Test.class));
在后一种情况下,您的 Test class 应该是一个普通的 POJO,其属性与 select 列相匹配
我有以下 Java 方法:
public void loadData()
{
session = DaoSF.getSessionFactory().openSession();
String sql = "select s.column1, SUM(s.column2), 'hi' as column3 from Source s group by s.column1";
Query query = session.createSQLQuery(sql).addEntity(Test.class);
dataList = query.list();
}
Class 来源:
@Entity
@Table(name="SourceTable")
public class Source implements Serializable
{
@Id
private int column1;
private int column2;
+ getters and setters
}
适当class测试:
@Entity // why?
public class Test implements Serializable
{
@Id
private int column1;
private int column2;
private String column3;
+ getters and setters
}
和休眠映射:
...
<mapping class="objects.Test"/> // why?
<mapping class="tables.Source"/>
...
一切正常,但我不明白一件事:
为什么对象 Test
必须映射到 hibernate.xml
并由 @Entity
标记签名,如果它在真正的 SQL 服务器中没有反射?为什么它不能是 'plain' Java 对象?
当我删除 @Entity
和 <mapping class="objects.Test"/>
时,它报告以下错误:
org.hibernate.MappingException: Unknown entity: objects.Test
它不一定是,但由于 hibernate 正在调用 entity query
,您已经明确地将其标记为实体。Query query = session.createSQLQuery(sql).addEntity(Test.class);
你应该做的是 return a non-managed entity in a query 所以写一些像
Query query = session.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Test.class));
在后一种情况下,您的 Test class 应该是一个普通的 POJO,其属性与 select 列相匹配