【问题标题】:Can't get result when running the query from Spring Data Jpa从 Spring Data Jpa 运行查询时无法获得结果
【发布时间】:2020-06-11 08:32:39
【问题描述】:

在 pgAdmin 中运行以下查询时,一切都很好,但是当我从 java 代码运行查询时出现错误。

我尝试转换变量但没有结果,我收到转换语法错误

查询界面:

public interface SeanceRepository extends JpaRepository<Seance, Integer>{

    @Query(value = "select * from seance, patient where extract(month from date) = ?1 "
            + "and extract(year from date) = ?2 and patient.id = seance.patient_id", 
              nativeQuery = true)
    public List<Object> getSeanceByMonthYear(String month, String year);
}

错误:

org.postgresql.util.PSQLException: ERREUR: l'opérateur n'existe pas : double precision = character varying
  Indice : Aucun opérateur ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.
  Position : 62
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2440) ~[postgresql-42.2.5.jar:42.2.5]
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2183) ~[postgresql-42.2.5.jar:42.2.5]
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:308) ~[postgresql-42.2.5.jar:42.2.5]

Patient.java

@Entity
@Table(name = "Patient")
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class Patient {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String firstName;
    private String lastName;
    private String cin;
    private Date birthDate;
    private String phoneNumber;
    private Boolean active;

    //getters and setters
}

seance.java

@Entity
@Table(name = "Seance")
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class Seance {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private Date date;

    @OneToOne
    private Patient patient;

    @OneToOne
    private TypeConsultation typeConsultation;

    private String motif;

    //getters and setters

【问题讨论】:

  • 你能把错误信息翻译成英文吗?
  • @Jens error operator does not exist double precision = character varying
  • 看起来extract(month from date) 没有返回字符。尝试明确投射它

标签: postgresql spring-boot spring-data-jpa spring-data


【解决方案1】:

这是因为函数提取了一个双精度,然后你将它与一个字符串进行比较

【讨论】:

    【解决方案2】:

    正如您在https://w3resource.com/PostgreSQL/extract-function.php 中看到的那样

    提取函数()用于检索子字段,例如年份或 日期/时间值的小时。源必须是一个值表达式 输入时间戳、时间或间隔。该字段是标识符或 选择要从源值中提取的字段的字符串。

    语法:

    提取(时间戳中的字段)或提取(间隔中的字段)

    返回类型:双精度。

    PostgreSQL 版本:9.3

    extract 返回一个双精度值,您尝试将其与 varchar 进行比较。它不能由 postgresSQL 自动完成,您必须明确地完成:

    @Query(value = "select * from seance, patient where extract(month from date)::varchar(255) = ?1 "
            + "and extract(year from date)::varchar(255) = ?2 and patient.id = seance.patient_id", 
              nativeQuery = true)
    

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 2017-12-13
      • 1970-01-01
      • 2018-06-04
      • 2017-05-08
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多