当前位置: 首页 > 知识库问答 >
问题:

JPQL子查询示例抛出错误关系“table_name”不存在,Spring Boot

郎经纶
2023-03-14

我试图在Spring Boot的一个查询示例JPQL中实现一个子查询,但出现了错误

我的实体表结构如下:

package com.ericsson.smart.meter.smartmeter.model;
import java.util.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
@Setter
@Entity
@Table(name = "\"P_CC_CASE\"", schema = "public")

public class Cases {

@Id
@Column(name = "\"CASE_ID\"")
private long caseId;

@Column(name = "\"CASE_FOCUS\"")
private String caseFocus;

@Column(name = "\"CASE_TYPE\"")
private String caseType;

@Column(name = "\"CASE_CATEGORY\"")
private String caseCategory;

@Column(name = "\"CASE_RPT_CATEGORY\"")
private String caseRptCategory;

@Column(name = "\"CASE_STATUS\"")
private String caseStatus;

@Column(name = "\"CASE_CUST_SEVERITY\"")
private String caseCustSeverity;

@Column(name = "\"CASE_EON_SEVERITY\"")
private String caseeonSeverity;

@Column(name = "\"CASE_PRIORITY\"")
private String casePriority;

@Column(name = "\"CASE_ISSUE\"")
private String caseIssue;

@Column(name = "\"CREATED_ON\"")
private Date createdOn;

@Column(name = "\"EXPECTED_RESPONSE_DATE\"")
private Date expectedResponseDate;

@Column(name = "\"LAST_CONTACT_DATE\"")
private Date lastContactDate;

@Column(name = "\"FIRST_RESPONSE_TO_CUST\"")
private Date firstResponseToCust;

@Column(name = "\"CONTACT_DATE\"")
private Date contactDate;

@Column(name = "\"CREATED_BY\"")
private String createdBy;

@Column(name = "\"ORGANIZATION_ID\"")
private String organizationId;

@Column(name = "\"QUEUE\"")
private String queue;

@Column(name = "\"CHANGED_BY\"")
private String changedBy;

@Column(name = "\"EQUIPMENT_ID\"")
private String equipmentId;

@Column(name = "\"EVENT_ID\"")
private String eventId;

@Column(name = "\"CASE_TITLE\"")
private String caseTitle;

@Column(name = "\"CASE_DESC\"")
private String caseDesc;

@Column(name = "\"SUPPORT_KEY\"")
private String supportKey;

@Column(name = "\"OBJEVENTS\"")
private String objevents;

@Column(name = "\"POD\"")
private String pod;

@Column(name = "\"CHNAGED_DATE\"")
private Date chnagedDate;

}

我尝试实现的查询如下:

SELECT T1.* FROM (SELECT * FROM "P_CC_CASE" WHERE "CASE_TYPE" IN ('GAS','HEAT','ELECTRICITY') OR "CASE_TYPE" IS NULL) T1;

@Query(value = GET_CASES_BY_PARAMS, nativeQuery = true)
List<Cases> searchCases(@Param("caseCategories") List<String> caseCategories);

我无法理解内部查询也返回一组类型Case,整个查询也是如此,但是当一起编写时会出现错误。有人能帮忙吗,我如何实现这个?

提前谢谢。

共有1个答案

暴骏奇
2023-03-14
SELECT T1.* FROM (SELECT * FROM "P_CC_CASE" WHERE "CASE_TYPE" IN ('GAS','HEAT','ELECTRICITY') OR "CASE_TYPE" IS NULL) T1;

请将@Column和@Entity的value属性更改为@Column(“Column”)和@Entity(“P\u CC\u CASE”)

表名为“P\u CC\u CASE”,具有双配额。您需要在@Entity annotation处编写P\u CC\u大小写

从“P\u CC\u CASE”中选择*表示表名为字符串,因此无法找到它。

package com.ericsson.smart.meter.smartmeter.model;
import java.util.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
@Setter
@Entity
@Table(name = "P_CC_CASE", schema = "public")

public class Cases {

@Id
@Column(name = "CASE_ID")
private long caseId;

@Column(name = "CASE_FOCUS")
private String caseFocus;

...

}

还有另一个问题。如果nativeQuery为true,则不能使用jqpl。

@Query(value = GET_CASES_BY_PARAMS) List<Cases> searchCases(@Param("caseCategories") List<String> caseCategories); 
 类似资料:
  • 问题内容: 我正在尝试在PostgreSQL 8.4.2 DB上运行hibernate模式。每当我尝试运行一个简单的Java代码,例如: 我收到以下错误: 由于我将选项hibernate.show_sql选项设置为true,因此可以看到hibernate尝试运行以下SQL命令: 实际上,它至少应运行以下命令: 有谁知道我需要进行哪些更改才能使Hibernate为PostgreSQL生成正确的SQL

  • 我使用PostgreSQL 10、Spring Boot 2.2.7.Release和pgAdmin 4来实现Postgres GUI 我有以下实体类: 我已经使用GUI PGADMIN4为ID列“TB03_TABLE_A_SEQ”创建了表“TB03_TABLE_A”和序列 我哪里出问题了?请救命! 提前感谢!

  • 问题内容: 我正在尝试将netbeans连接到我的postgresql数据库。该连接似乎已经起作用,因为仅在连接时我没有收到任何错误或异常,诸如getCatalog()之类的方法也返回正确的答案。 但是,当我尝试运行简单的SQL语句时,出现错误“错误:关系“ TABLE_NAME”不存在”,其中TABLE_NAME是数据库中确实存在的我的任何表。这是我的代码: 我以为netbeans可能找不到表,

  • 问题内容: 嗨,我尝试插入表tester3,当我使用语法时失败 但 工作正常。 我想我缺少了一些非常琐碎的东西,我尝试了其他一些列名,其中一些工作正常,而有些却无法正常工作。我很迷惑。PostgreSQL是否对列名有限制,因此插入查询的第一种语法适用于该列名? 编辑 : 签出Girdon Linoff的答案,正如FrankHeikens指出的那样,其他的列名在没有小写的情况下也没有引号。 小写列是

  • :“查询执行失败。原因: SQL错误[42P01]:错误:关系”temp_table“存在。 不存在” 我想创建一个临时表来临时存储一些记录。

  • 问题内容: 我在使用PostgreSQL 9.3和使用qoutes创建的表时遇到了一个奇怪的问题。例如,如果我使用qoutes创建表: 该表已正确创建,在pgAdminIII的SQL窗格中查看该引号时,可以看到保留了引号。但是,当我查询数据库以查找所有可用表的列表时(使用下面的查询),我看到结果不包含表名的引号。 由于该表是用引号创建的,因此我无法直接使用上述查询返回的表名,因为该表名未加引号,并