gpt4 book ai didi

java - 如何从自定义 Hibernate 查询填充 POJO 类?

转载 作者:行者123 更新时间:2023-12-01 06:09:40 25 4
gpt4 key购买 nike

我是 Hibernate 新手,并尝试在 Spring MVC 应用程序中使用它。我有一个如下所示的自定义查询:

public List<MyResults> findEmployees() {
String queryString = "select E.firstname, E.lastname, A.city, A.state
from Employee E, Address A, where ...."; // whatever where clause
SQLQuery query = this.sessionFactory.getCurrentSession().createSQLQuery(queryString);
query.setString(...) // set query parameters
return query.list();
}

这行不通。查询运行,但它返回对象列表。如何告诉 Hibernate 使用我的 MyResults 类?

class MyResults {
private String firstName;
// other fields in the search

@Column(name = "FirstName")
String getFirstName() {
return firstName;
}
void setFirstName(String firstName) {
this firstName = firstName;
}

// other getters & setters
}

我也不确定 MyResults 需要什么注释?

我尝试了几件事:

return (List<MyResults>)query.list();

尽管这个 Actor 阵容并没有做到这一点。

我尝试过使用 ResultTransformer:

 query.setResultTransformer(new AliasToBeanResultTransformer(MyResults.class));  //done before the return

但这会导致

ClassClastException: MyResults cannot be cast to java.util.Map.

有人可以告诉我如何在 Hibernate 中正确设置此类查询吗?

最佳答案

我发现的一个解决方案是按照建议使用 NamedNativeQuery,但使 MyResults 成为 Entity。就像这样:

@Entity
@NamedNativeQuery(name = "findMyResult", query = "select E.firstname, E.lastname, A.city, A.state from Employee E, Address A, where ....", resultClass = MyResults.class)
class MyResults {
private String firstName;
// other fields in the search

@Column(name = "FirstName")
String getFirstName() {
return firstName;
}
void setFirstName(String firstName) {
this firstName = firstName;
}
// other getters & setters
}

但请注意,Entity使用@Table 进行注释。

然后在我的 DAO 类中:

public List<MyResults> checkResults() {
Query query = sessionFactory.getCurrentSession().getNamedQuery("findMyResult");
query.setParameter("employeeID", "1234");
return (List<MyResults>)query.list();
}

我现在的问题是:为什么这有效?

关于java - 如何从自定义 Hibernate 查询填充 POJO 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37400670/

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