休眠本机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设置为常规数据传输对象。
请阅读有关实体,数据传输对象,数据访问对象的信息,以了解每个对象应该做什么。

08-04 03:19