【问题标题】:jpql error near wherejpql错误在哪里附近
【发布时间】:2018-06-05 02:53:36
【问题描述】:

嗨,我正在学习 JPQL,我正在使用以下代码选择 DTO

class User{
private int id;
private String name;

@oneToOne
private Service service;

}
Class Service{
private int id
private String serviceName;
}

class UserServiceDTO{

private String userName;
private String serviceName;

public UserServiceDTO(String userName,String serviceName){
this.userName=userName;
this.serviceName-serviceName;
}
}

public UserServiceDTO findByName(String userName){
TypedQuery<UserServiceDTO> query= em.createQuery("SELECT new UserServiceDTO(u.name, s.userName) FROM User u LEFT OUTER JOIN Service s where 
 u.name LIKE :userName");
 UserServiceDTO userService=query.setParameter("userName",userName).getSingleReslut();
}

我得到以下堆栈跟踪:

Could not extract ResultSet
Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "where"
  Position: 260
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:420)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:305)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60)
    ... 43 more

我正在使用PostgreSQL 任何见解都会有所帮助。请帮助我哪里可能错了请指导我

【问题讨论】:

  • User u LEFT OUTER JOIN Service s 也没有有效的 jpql 加入
  • 你没有定义连接列
  • @NicoVanBelle 你能提供更多细节吗

标签: java postgresql hibernate jpql


【解决方案1】:

该 JPQL 的正确语法是

SELECT new UserServiceDTO(u.name, s.serviceName) FROM User u LEFT OUTER JOIN u.service s WHERE u.name LIKE :userName 

连接是通过实体图完成的,因此您只需指定要访问的实体字段。

【讨论】:

  • 您好,感谢您的回复,现在,我遇到了could not resolve property: Service of: User以下错误
  • 感谢您的帮助,我知道了:)
【解决方案2】:

无需显式加入。也可以这样写:SELECT new UserServiceDTO(u.name, u.service.serviceName) FROM User u where u.name LIKE :userName;您可能需要使用@JoinColumn 注释指定连接列映射

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 2015-04-11
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2022-08-02
    相关资源
    最近更新 更多