gpt4 book ai didi

Spring Data Jdbc - 将内部类映射到表列

转载 作者:行者123 更新时间:2023-12-02 03:26:24 25 4
gpt4 key购买 nike

使用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> {}

这是我的上下文配置:

@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);
}
}
}

最佳答案

是的,这是可能的。您需要提供从 InnerString 以及返回的转换器。

在您的应用程序上下文配置中为jdbcCustomConversions注册一个bean:

@Bean
CustomConversions jdbcCustomConversions() {
return new JdbcCustomConversions(asList(InnerToString.INSTANCE, StringToInner.INSTANCE));
}

定义引用的转换器如下:

@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;
}
}

转换器不必是枚举,但只要转换器未参数化,拥有多个实例就没有意义。

注释@WritingConverter@ReadingConverter很重要,因为它们控制在写入数据库或时是否使用转换器从数据库读取。

请注意,这适用于存储在单个列中的类。尚不支持映射到列列表的正确嵌入实体。请参阅DATAJDBC-111

关于Spring Data Jdbc - 将内部类映射到表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53283119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com