gpt4 book ai didi

java - 使用 addEntity 获取 hibernate 中表的特定列

转载 作者:行者123 更新时间:2023-11-29 10:40:57 24 4
gpt4 key购买 nike

我熟悉 Java,但对 ORM 和 Hibernate 还很陌生。

我正在使用以下查询来获取 hibernate 中表的所有列的结果集。

(List<Neighborhood>)session.createSQLQuery("SELECT * FROM Neighborhood").addEntity(Neighborhood.class).list();

我只想从此表中获取两个特定列。我在互联网上查找但找不到可以用作上述语句修改的解决方案。

我尝试了以下查询,但得到 - SQLGrammarException: 无法提取 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();

编辑2:

在 @Tehmina 的解决方案之后,我收到一个错误 - java.sql.SQLException: Column 'educationYouth' not found 因为 educationYouth 是类名“EducationYouth”的对象。在 Neighborhood 表中,没有名为 educationYouth 的列,但所有列都来自 EducationYouth 类。

最佳答案

试试这个

(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>

我希望它能解决您的错误。

关于java - 使用 addEntity 获取 hibernate 中表的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45497203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com