【问题标题】:o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: syntax error at or near "("o.h.engine.jdbc.spi.SqlExceptionHelper:错误:“(”或附近的语法错误
【发布时间】:2020-08-26 15:07:07
【问题描述】:

我正在尝试创建一个用户 API,但我的简单查询出现了错误。请找到我的以下代码。

在日志中我得到这个错误

Hibernate: Select new  UserResponse(u.user_id,u.user_name,u.password) from public."DetailsCompany" u where user_id =?
2020-08-26 20:31:49.078  WARN 26274 --- [nio-7071-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 42601
2020-08-26 20:31:49.078 ERROR 26274 --- [nio-7071-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: syntax error at or near "("
@Repository
public interface UserRepository extends JpaRepository<UserEntity, Long>{
  @Query(value="Select new  UserResponse(u.user_id,u.user_name,u.password) from public.\"DetailsCompany\" u where user_id =:id",nativeQuery = true)
  public UserResponse findUserById(@Param("id")Integer id);
}

UserResponse.java
package com.company.user.Response;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserResponse{
    private Integer userId;
    private String userName;
    private String password;
}
#As requested Entity Class Details#
#UserEntity.java#
package com.company.user.Entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="DetailsCompany", schema = "public")
public class UserEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
private Integer userId;
@Column(name = "user_name")
private String userName;
@Column(name = "password")
private String password;
}

    

【问题讨论】:

    标签: java rest jpa jpql


    【解决方案1】:

    构造函数名称必须是完全限定的。尝试使用 com.your.package.UserResponse

    【讨论】:

    • 我已经尝试过了,但这并不能解决我的问题
    • SELECT new UserResponse(u.user_id,u.user_name,u.password) FROM {h-schema}DetailsCompany u WHERE user_id =:id",nativeQuery = true。你能试试这个吗? @Gaurav
    【解决方案2】:

    您正在将 HQL 传递给本机查询。将 nativeQuery 更改为 false。

    将您的查询更改为

    @Query(value="Select new  com.company.user.Response.UserResponse(u.userId,u.userName,u.password) from UserEntity u where u.userId =:id",nativeQuery = false)
    

    【讨论】:

    • 方法 public abstract com.company.user.Response.UserResponse com.company.user.Repository.UserRepository.findUserById(java.lang.Integer)! 的查询验证失败!收到上述异常
    • 您的查询有错误。检查 UserResponse 类构造函数和 DetailsCompany 映射,是否正确?另外,我认为您可以删除双引号。
    • 我正在使用 lombok 并为三个字段的构造函数应用所有注释
    • 去掉双引号后:错误:关系“public.detailscompany”不存在
    • 你能发布你的 DetailsCompany 课程吗?
    猜你喜欢
    • 2015-07-24
    • 2017-02-20
    • 2017-07-15
    • 2010-12-24
    • 2016-07-10
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多