【发布时间】:2022-09-26 11:45:09
【问题描述】:
在讨论实际问题之前,让我简要介绍一下我在寻找什么。 我正在寻找加密和解密实体内的字段。在 JPA 中,我们可以使用属性转换器来实现这一点。但在 spring data jdbc 中它似乎不受支持。
所以,我正在尝试使用 spring data jdbc 的 customconverstions 功能。在这里,我正在创建一种类型,如下所示
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class EncryptionDataType {
private String value;
@Override public String toString() {
return value ;
}
}
在 Pojo 中,我将使用这种类型作为字段。
@Table(\"EMPLOYEE\")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Data
public class Employee
{
@Column(\"name\")
private EncryptionDataType name;
@Id
private Integer id;
@Version
private Long version;
}
所以从这里我希望将\'EncryptionDataType\'保存为mysql中的普通字符串列,为此我创建了用于读写的转换器
@WritingConverter
public class EncryptionDataTypeWriteConverter implements Converter<EncryptionDataType, String> {
@Override public String convert(EncryptionDataType source) {
return source.toString()+\"add\";
}
}
@ReadingConverter
public class EncryptionDataTypeReadConverter implements Converter<String, EncryptionDataType> {
@Override public EncryptionDataType convert(String source) {
return new EncryptionDataType(source);
}
}
在配置文件中配置这些转换。
@Configuration
public class MyConfig {
@Bean
protected JdbcCustomConversions JdbcConversion(Dialect dialect) {
return new JdbcCustomConversions(
Arrays.asList(new EncryptionDataTypeReadConverter(),new EncryptionDataTypeWriteConverter()));
}
}
这种配置似乎不起作用。我得到以下错误。
PreparedStatementCallback; bad SQL grammar [INSERT INTO `encryption_data_type` (`name`, `value`) VALUES (?, ?)]; nested exception is java.sql.SQLSyntaxErrorException: Table \'testschema.encryption_data_type\' doesn\'t exist
似乎不是将我的加密数据类型转换为字符串,而是尝试插入新表。请帮我。我错过了什么吗?
更新配置代码:
@Configuration
@EnableJdbcRepositories(transactionManagerRef = \"CustomJdbcTranasactionManager\", jdbcOperationsRef = \"CustomJdbcOperationsReference\", repositoryFactoryBeanClass = CustomRepositoryFactoryBean.class, basePackages = {
\"com.java.testy\"
})
@EnableAutoConfiguration(exclude = {
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration.class,
org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration.class
})
public class MyConfig {
@Bean
protected JdbcCustomConversions JdbcConversion(Dialect dialect) {
return new JdbcCustomConversions(
Arrays.asList(new EncryptionDataTypeReadConverter(),new EncryptionDataTypeWriteConverter()));
}
// creating beans for datasource,JdbcOperationsReference,JdbcTranasactionManager,JdbcConverter,JdbcMappingContext,DataAccessStrategy,JdbcAggregateTemplate
}
-
您如何设置应用程序上下文?
-
我正在通过注释进行所有配置。我在我的问题中更新了参考配置文件
标签: java spring spring-boot spring-jdbc spring-data-jdbc