由于实体和表名不同,在实体增加注解
通过spring-data-jdbc提供的仓库进行操作时,会将表名、字段名加双引号,例如:
SELECT "user123"."ID" AS "ID", "user123"."SEX" AS "SEX", "user123"."AGE" AS "AGE", "user123"."TENANT_ID" AS "TENANT_ID", "user123"."IS_DELETE" AS "IS_DELETE", "user123"."OWN_USER_ID" AS "OWN_USER_ID", "user123"."CREATED_BY" AS "CREATED_BY", "user123"."CREATED_DATE" AS "CREATED_DATE", "user123"."OWN_ORGAN_CODE" AS "OWN_ORGAN_CODE", "user123"."LAST_MODIFIED_BY" AS "LAST_MODIFIED_BY", "user123"."LAST_MODIFIED_DATE" AS "LAST_MODIFIED_DATE" FROM "user123"
但是有些业务比较复杂,所以采用querydsl进行查询,但是测试的时候发现,querydsl执行时没有对表名进行双引号处理,所以在此情况下,无论我初始化数据库采用大写表名、小写表名,都会有一种情况产生找不到的表的情况。
请问如何在不修改实体表明注解为大写的情况下,能解决如上问题
你把报错信息和报错代码段带我
【以下回答由 GPT 生成】
解决方案:
要解决Oracle环境中Querydsl查询时表名大小写不敏感的问题,可以通过自定义Querydsl的表名处理策略来实现。具体的解决步骤如下:
TableNameResolver
接口。可以命名为OracleCaseInsensitiveTableNameResolver
。```java import com.querydsl.sql.*;
public class OracleCaseInsensitiveTableNameResolver extends DefaultTableNameResolver { @Override protected String normalizeName(String name) { return name.toLowerCase(); } } ```
在该类中,重写normalizeName
方法,将表名转换为小写。
```java import com.querydsl.sql.*;
@Configuration public class QuerydslConfig {
@Bean
public OracleCaseInsensitiveTableNameResolver tableNameResolver() {
return new OracleCaseInsensitiveTableNameResolver();
}
@Bean
public SQLTemplates sqlTemplates() {
return OracleTemplates.builder()
.printSchema()
.build();
}
@Bean
public SQLQueryFactory sqlQueryFactory(DataSource dataSource, SQLTemplates sqlTemplates, OracleCaseInsensitiveTableNameResolver tableNameResolver) {
Configuration configuration = new Configuration(sqlTemplates);
configuration.setTableNameResolver(tableNameResolver);
return new SQLQueryFactory(configuration, dataSource);
}
} ```
在该配置类中,创建了一个OracleCaseInsensitiveTableNameResolver
的Bean,并且配置了一个SQLTemplates
的Bean。最后,创建了一个SQLQueryFactory
的Bean,并将自定义的TableNameResolver
设置到Configuration
中。
DEFAULT
(即使用默认的双引号处理)。```java import javax.persistence.*;
@Table(name = "tableName", schema = "schemaName", catalog = "catalogName", quote = "\"") public class EntityName {
// Entity properties and methods
} ```
在@Table
注解中,通过设置quote = "\""
,即指定了默认的双引号处理方式。
通过以上步骤,就可以解决Oracle环境中Querydsl查询时表名大小写不敏感的问题,而无需修改实体类的注解。