我目前正在使用Spring和HANA DB开展项目。
我已经有一个正常工作的Web服务,但我需要从我的HANA数据库中选择一个View(在Spring Webservice之外创建)。
我的视图来自2个表,其中4个字段是来自其中一个表的一列的SUM(计算每4个可能值中的每一个的多少,并在4个字段的每一个中显示为数字)
我在一些Spring JPA帖子中看到它应该通过简单的选择正常工作,我的问题是:
我通常选择这样的选择:
TypedQuery<name_of_the_model_class> query = em.createQuery("SELECT c FROM NameOfTheTable ORDER BY c.some_field DESC WHERE c.name =?1 ", name_of_the_model_class.class);
query.setParameter(1, name_to_search);
之后我将列表返回给Controller,Controller将其显示在JSON中。
问题是,我在Eclipse中创建了这个View,直接在HANA DB中使用SQL代码,而不是在Webservice上创建它。
我想知道,有没有一种方法可以像我上面所示那样选择,在没有模型类的情况下返回它? 它只需要一个具有完全相同字段的类,如a模型类但没有@Entity注释吗?
OR 有没有办法在Spring JPA中创建类似模型类的视图?如果有办法,有什么注释可以使它起作用?
春天JPA不会接受我在没有上课的情况下退回吗?
我阅读了大量帖子,但没有找到它,即使在手册中也没有给出明确的说明或示例。
非常感谢您的时间,如果我没有解释清楚,请告诉我,我真的坚持这一点。
更多信息(我的最新尝试): 我在DAO的整个搜索功能:
public List<IncidentStatusResultsUser> getIncidentStatusByUser(String userID) throws ParseException {
List<IncidentStatusResultsUser> resultList = em.createQuery("SELECT c FROM USERSTATUS ORDER BY c.uploadDateTime DESC WHERE c.userID=?1 ").setMaxResults(48).getResultList();
Collections.reverse(resultList);
return resultList;
}
我创建了一个类来接收具有相同视图字段的数据:
public class IncidentStatusResultsUser {
private Date uploadDateTime ;
private int status1;
private int status2;
private int status3;
private int status4;
//All gets and sets ommited
public IncidentStatusResultsUser (Date uploadDateTime, long status1, long status2, long status3, long status4) {
this.uploadDateTime = uploadDateTime;
this.status1= status1;
this.status2= status2;
this.status3= status3;
this.status4= status4;
}
}
EDIT-2:在类中添加了公共构造函数。
最诚挚的问候, Famibica
答案 0 :(得分:0)
只要具有主键(或复合键),您就应该能够将视图映射到JPA对象。然后,您可以映射到Spring JPA Reposiry,以便查询来自 -
TypedQuery<name_of_the_model_class> query = em.createQuery("SELECT c FROM NameOfTheTable ORDER BY c.some_field DESC WHERE c.name =?1 ", name_of_the_model_class.class);
query.setParameter(1, name_to_search);
要
findBySomeFieldOrderBySomeFieldDesc(String name_to_search)
答案 1 :(得分:0)
如果您希望JPA直接返回对象列表,则需要 DTO ,就像您创建的IncidentStatusResultsUser
一样。确保你有一个constructor
占用所有字段,例如:
public IncidentStatusResultsUser(Date uploadDateTime, int status1, int status2, int status3, int status4)
然后在您的查询字符串dtoQuery
中,您可以执行以下操作:
SELECT new IncidentStatusResultsUser(c.uploadDateTime, c.status1,c.status2,c.status3,c.status4)
FROM NameOfTheTable
ORDER BY c.some_field DESC
WHERE c.name =?1
然后你应该可以打电话给你的东西:
List<IncidentStatusResultsUser> resultList = em.createQuery(dtoQuery).setMaxResults(48).getResultList();
希望它适合你:)