休眠本机sql连接查询有问题。我的查询在下面,并且适用于Mysql db。
SELECT c.cart_id, u.name, u.surname, c.totalPrice
FROM sandbox.cart c JOIN
sandbox.user u
ON u.id = c.placedBy
我在代码中使用休眠,遇到异常
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 |放置总价
用户
| id |电邮|名称|姓
我的映射类是
@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设置为常规数据传输对象。
请阅读有关实体,数据传输对象,数据访问对象的信息,以了解每个对象应该做什么。