Bevor ich zum eigentlichen Problem gehe, möchte ich kurz erklären, wonach ich suche.
Ich suche nach einer Möglichkeit, die Felder innerhalb der Entität zu verschlüsseln und zu entschlüsseln. In JPA können wir den Attributkonverter verwenden und dies erreichen. Aber in Spring Data JDBC wird es anscheinend nicht unterstützt.
Ich versuche also, die benutzerdefinierte Konvertierungsfunktion von Spring Data JDBC zu verwenden. Hier erstelle ich einen Typ wie unten
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class EncryptionDataType {
private String value;
@Override public String toString() {
return value ;
}
}
in Pojo werde ich diesen Typ als Feld verwenden.
@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;
}
Davon erwarte ich, dass ich den „EncryptionDataType“ als normale Zeichenfolgenspalte in MySQL speichere. Dafür habe ich einen Konverter zum Lesen und Schreiben erstellt
@WritingConverter
public class EncryptionDataTypeWriteConverter implements Converter {
@Override public String convert(EncryptionDataType source) {
return source.toString()+"add";
}
}
@ReadingConverter
public class EncryptionDataTypeReadConverter implements Converter {
@Override public EncryptionDataType convert(String source) {
return new EncryptionDataType(source);
}
}
Konfigurieren dieser Konvertierungen in der Konfigurationsdatei.
@Configuration
public class MyConfig {
@Bean
protected JdbcCustomConversions JdbcConversion(Dialect dialect) {
return new JdbcCustomConversions(
Arrays.asList(new EncryptionDataTypeReadConverter(),new EncryptionDataTypeWriteConverter()));
}
}
Diese Konfiguration scheint nicht zu funktionieren. Ich erhalte die folgende Fehlermeldung.
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
anstatt meinen Verschlüsselungsdatentyp in einen String umzuwandeln, versucht er, ihn in eine neue Tabelle einzufügen. Bitte hilf mir. Vermisse ich etwas?
Aktualisierter Konfigurationscode:
@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
}
Benutzerdefinierte Konvertierungen funktionieren in Spring Data JDBC nicht ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post