gpt4 book ai didi

java - Hibernate原生sql连接查询

转载 作者:行者123 更新时间:2023-11-29 11:28:53 25 4
gpt4 key购买 nike

我在使用 hibernate native sql 连接查询时遇到问题。我的查询如下,适用于 Mysql 数据库。

SELECT c.cart_id, u.name, u.surname, c.totalPrice
FROM sandbox.cart c JOIN
sandbox.user u
ON u.id = c.placedBy

我在代码中使用hibernate并遇到异常

java.sql.SQLException: Column 'id' not found.
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1093)

在此处的代码中查询

Session session = hibernateUtil.getSessionFactory().getCurrentSession();
SQLQuery query = session.createSQLQuery(ORDER_PER_USER_QUERY);
query.addEntity(OrderPerUser.class);
return query.list();

表格列名称

购物车

| cart_id | placedBy | totalPrice

用户

| id | email | name | surname

我的映射类是

   @Entity
public class OrderPerUser {
@Id
private long id;
private String name;
private String surName;
private long cartId;
private double totalPrice; }

最佳答案

您需要删除该行:
query.addEntity(OrderPerUser.class);
之后,您需要重写代码并手动映射您的对象,因为您的 OrderPerUser 不是实体:

Session session = hibernateUtil.getSessionFactory().getCurrentSession();
SQLQuery query = session.createSQLQuery(ORDER_PER_USER_QUERY);
List<OrderPerUser> returnList new ArrayList<>();
for(Object[] row : query.list()){
OrderPerUser orderPerUserObj = new OrderPerUser();
oderPerUserObj.setCartId(Long.parseLong(row[0].toString()));
//put other properties here
returnList.add(orderPerUserObj);
}
return returnList;

Edit1:现在我看到您添加了映射的类,但 OrderPerUser 在您的情况下不应该是实体,而是常规的DTO。实体需要一个 ID,但在这种情况下您无法选择 ID,因为 OrderPerUser 不是表的一部分,它只是您想要在内存中而不是在数据库中的一些选定数据。因此,您应该将 OrderPerUser 设置为常规数据传输对象。
请阅读实体、数据传输对象、数据访问对象以了解每个对象应该做什么。

关于java - Hibernate原生sql连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37748706/

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