postgresql - postgres 10.1和hibernate的关系不存在错误
问题描述
我最近从 oracle 迁移到 postgres 10.1 数据库。我通过 sql 查询手动创建了所有表,并确保不在表/列名称周围使用任何双引号。
CREATE TABLE MYSCHEMA.SOMETABLE (ID VARCHAR(20) NOT NULL primary key, DISPLAYTEXT VARCHAR(100)));// skipping other column names for brevity
代码中的实体类
@Entity
@Table(name = "MYSCHEMA", schema = "SOMETABLE")
public class SomeTable implements Serializable {
private static final long serialVersionUID = -4856666041227614340L;
@Column(name = "VERSION")
private String version;
@Column(name = "DISPLAYTEXT")
private String displayText;
//other columns
}
使用 Jpa 存储库,我正在查询此表。
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "someEntityManagerFactoryContentDB",
transactionManagerRef = "sometransactionManagerContentDB",
basePackages = {"com.somepath.repository.content"})
public interface SomeSearchConfigRepository extends JpaRepository<SomeTable, String> {
List<SomeTable> findBySearchTypeAndActiveOrderBySequenceAsc(
String searchType, String active);
}
问题是它无法找到此表并引发以下错误。
2019-06-24 09:56:26,781 WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper:SQL Error: 0, SQLState: 42P01
2019-06-24 09:56:26,782 ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper:ERROR: relation "MYSCHEMA.SOMETABLE" does not exist
根据日志生成的 Sql
Hibernate:
/* select
generatedAlias0
from
SomeTable as generatedAlias0
where
(
generatedAlias0.searchType=:param0
)
and (
generatedAlias0.active=:param1
)
order by
generatedAlias0.sequence asc */ select
myalias_."ID" as ID1_3_,
myalias_."ACTIVE" as ACTIVE2_3_,
myalias_."COLUMNNAME" as COLUMNNA3_3_,
myalias_."DATATYPE" as DATATYPE4_3_,
myalias_."DISPLAYTEXT" as DISPLAYT5_3_,
myalias_."LENGTH" as LENGTH6_3_,
myalias_."LINKCOLUMN" as LINKCOLU7_3_,
myalias_."LINKSEARCH" as LINKSEAR8_3_,
myalias_."LOOKUPCOLUMN" as LOOKUPCO9_3_,
myalias_."LOOKUP_CATEGORY" as LOOKUP_10_3_,
myalias_."MULTISELECT" as MULTISE11_3_,
myalias_."REFERENCEKEY" as REFEREN12_3_,
myalias_."REFERENCETABLENAME" as REFEREN13_3_,
myalias_."REFERENCEVALUE" as REFEREN14_3_,
myalias_."SEARCHTYPE" as SEARCHT15_3_,
myalias_."SEQUENCE" as SEQUENC16_3_,
myalias_."TABLENAME" as TABLENA17_3_,
myalias_."VERSION" as VERSION18_3_
from
"MYSCHEMA"."SOMETABLE" myalias_
where
myalias_."SEARCHTYPE"=?
and myalias_."ACTIVE"=?
order by
myalias_."SEQUENCE" asc
是不是实体类中的注释以某种方式导致了这个问题?这里出了什么问题,如何通过对代码的最小更改来解决此问题?
解决方案
我假设您使用的是 Spring Boot。
一种选择是告诉 Hibernate 不要引用名称
spring.jpa.properties.hibernate.globally_quoted_identifiers=false
或者另一种选择是也用引号创建您的表并使用所有大写名称
推荐阅读
- ios - 返回相似结构的 2 个链接的 JSON 解码错误
- c++ - 在 Linux 中分页出大内存块
- r - BRM 模型编译但返回模型对象
- javascript - 如何使用“if”语句和“require”有条件地添加模块?
- powershell - 需要协助使用 Powershell 脚本来提取 AD 组的电子邮件地址
- python - 如何在可能有多种选择的 SQLAlchemy 中实现表单字段
- go - 使用 uintptr 作为弱参考是否安全
- c# - 找不到 IEnumerable<> 的任何方法来进行空检查
- reactjs - 将我的应用程序 react-native 组件导入到单个文件中,例如使用 vue?
- c - 声明与“__interwork __vfp”不兼容