Java 将SQLquery映射到普通对象,而不是实体

Java 将SQLquery映射到普通对象,而不是实体,java,sql-server,hibernate,mapping,Java,Sql Server,Hibernate,Mapping,我有以下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.

我有以下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();
}
@Entity
@Table(name="SourceTable")
public class Source implements Serializable 
{
  @Id
  private int column1;
  private int column2;
  + getters and setters
}
@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"/>
...
类源

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();
}
@Entity
@Table(name="SourceTable")
public class Source implements Serializable 
{
  @Id
  private int column1;
  private int column2;
  + getters and setters
}
@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"/>
...
适当的类测试

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();
}
@Entity
@Table(name="SourceTable")
public class Source implements Serializable 
{
  @Id
  private int column1;
  private int column2;
  + getters and setters
}
@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"/>
...
休眠映射

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();
}
@Entity
@Table(name="SourceTable")
public class Source implements Serializable 
{
  @Id
  private int column1;
  private int column2;
  + getters and setters
}
@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"/>
...

它不一定是,但是您已经通过使用它作为hibernate调用的结果,显式地将它标记为实体

你应该做的是这样写

Query query = session.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Test.class));

在后一种情况下,您的测试类应该是一个普通的POJO,其属性与select列匹配

谢谢,但我现在有一个报告:
org.hibernate.MappingException:JDBC类型没有方言映射:-15
这意味着基础类型无法映射到Java类型,您可以使用标量方法,或者通过使用自定义方言添加映射,在这里阅读更多内容非常感谢,我明天将尝试它WNP,希望它能帮助您