Bre*_*t Y 2 spring spring-data spring-boot spring-data-jdbc
使用Spring Data JDBC我希望将内部变量“inner”映射到外部表中的 varchar 列,而不是映射到它自己的表。这可能吗?
public class Outer {
@Id
private String id;
private Inner inner;
}
...
public class Inner {
private String value;
}
...
public OuterRepository implements CrudRepository<Outer, String> {}
Run Code Online (Sandbox Code Playgroud)
这是我的上下文配置:
@Configuration
@EnableJdbcRepositories
public class Config extends JdbcConfiguration {
@Bean
protected JdbcCustomConversions jdbcCustomConversions() {
return new JdbcCustomConversions(asList(StringToInner.INSTANCE, InnerToString.INSTANCE));
}
@WritingConverter
enum InnerToString implements Converter<Inner, String> {
INSTANCE;
@Override
public String convert(Inner source) {
return source.getValue();
}
}
@ReadingConverter
enum StringToInner implements Converter<String, Inner> {
INSTANCE;
@Override
public Inner convert(String source) {
return new Inner(source);
}
}
}
Run Code Online (Sandbox Code Playgroud)
是的,这是可能的。你需要从提供转换器Inner来String和背部。
在您的应用程序上下文配置中注册一个 bean jdbcCustomConversions:
@Bean
CustomConversions jdbcCustomConversions() {
return new JdbcCustomConversions(asList(InnerToString.INSTANCE, StringToInner.INSTANCE));
}
Run Code Online (Sandbox Code Playgroud)
定义引用的转换器如下:
@WritingConverter
enum InnerToString implements Converter<Inner, String> {
INSTANCE;
@Override
public String convert(Inner inner) {
return inner == null ? null : inner.value;
}
}
@ReadingConverter
enum StringToInner implements Converter<String, Inner> {
INSTANCE;
@Override
public Inner convert(String source) {
Inner inner = new inner();
inner.value = source;
return inner;
}
}
Run Code Online (Sandbox Code Playgroud)
转换器不必是枚举,但只要转换器未参数化,拥有多个实例就没有意义。
注释@WritingConverter和@ReadingConverter很重要,因为它们控制在写入数据库或从数据库读取时是否使用转换器。
请注意,这适用于存储在单个列中的类。尚不支持映射到列列表的正确嵌入实体。请参阅DATAJDBC-111。
| 归档时间: |
|
| 查看次数: |
1844 次 |
| 最近记录: |