我熟悉Java,但对ORM和Hibernate来说真的很新。
我使用以下查询来获取hibernate中表的所有列的结果集。
(List<Neighborhood>)session.createSQLQuery("SELECT * FROM Neighborhood").addEntity(Neighborhood.class).list();
我想从这个表中只获得两个特定的列。我查看了互联网,但无法找到可用作上述声明修改的解决方案。
我尝试了以下查询,但获得了 - SQLGrammarException: could not extract ResultSet
(List<Neighborhood>)session.createSQLQuery("SELECT neighborhoodName,educationYouth FROM Neighborhood").addEntity(Neighborhood.class).list();
编辑:
在@ scaryWombat的建议之后又有两次尝试查询。两者都给出相同的异常
第一
List list = session.createSQLQuery("SELECT neighborhoodName,educationYouth FROM Neighborhood").list();
第二
String sql = "SELECT neighborhoodName,educationYouth FROM Neighborhood";
SQLQuery query = session.createSQLQuery(sql);
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List results = query.list();
Edit2:
在@ Tehmina的解决方案之后,我收到一个错误 - java.sql.SQLException: Column 'educationYouth' not found
因为educationYouth是类名“EducationYouth”的对象。
在邻居表中没有名称为educationYouth的列,而是来自EducationYouth类的所有列。
答案 0 :(得分:1)
试试这个
(List<Neighborhood>)session.createSQLQuery("SELECT * FROM Neighborhood").list();
为了避免使用ResultSetMetadata的开销,或者只是在返回的内容中更明确,可以使用addScalar():
(List<Neighborhood>)session.createSQLQuery("SELECT * FROM Neighborhood").addScalar("neighborhoodName", Hibernate.STRING).addScalar("educationYouth", Hibernate.STRING);
或试试这个 Hibernate自动将数据转换为适当的类型。自动转换在所有情况下都不起作用,在这种情况下,我们有一个addScalar()的重载版本:
SQLQuery q = session.createSQLQuery("SELECT * FROM Neighborhood");
q.addScalar("neighborhoodName");
q.addScalar("educationYouth");
List<Object[]> rows = q.list();
for (Object[] row : rows) {
System.out.println(row[0] + " " + row[1] );
不要忘记检查hibernate配置文件
<!--hibernate.cfg.xml -->
<property name="show_sql">true</property>
我希望它能解决你的错误。