转换枚举列表,然后存储为' varchar []'
试图弄清楚如何在单个表列中存储枚举列表。
我从字符串
开始,然后起作用。我将仅显示代码的相关部分:
import com.vladmihalcea.hibernate.type.array.ListArrayType;
...
@Entity
@TypeDefs({
@TypeDef(
name = "list-array",
typeClass = ListArrayType.class
)
})
@Table(name = "reports")
public class Reports {
...
@Type( type = "list-array" )
@Column(
name = "origins",
columnDefinition = "varchar[]",
nullable = false
)
private List<String> origins;
...
PostgreSQL中的列的相应DDL定义为
origins _varchar NULL
Liquibase脚本中:
<column name="origins" type="varchar[]" remarks=""/>
但是,当我尝试将枚举存储以以下更改的枚举时(我基本上更改了类型和相应的内容GetTers/Setters)
private List<Origin> origins;
枚举代码看起来如此:
public enum Origin {
A, B, C
}
我有错误:
nested exception is org.hibernate.MappingException: Could not instantiate Type: com.vladmihalcea.hibernate.type.array.ListArrayType
我还尝试了转换器,但没有成功:
@Column(
name = "origins",
columnDefinition = "varchar[]",
nullable = false
)
@Convert(converter = OriginConverter.class)
private List<Origin> origins;
转换器代码下面:
@Converter
public class OriginConverter implements AttributeConverter<List<Origin>, List<String>> {
@Override
public List<String> convertToDatabaseColumn(List<Origin> origins) {
List<String> values = new ArrayList<>();
origins.forEach(
origin -> values.add(origin.name())
);
return values;
}
@Override
public List<Origin> convertToEntityAttribute(List<String> origins) {
var values= origins.stream().map(Origin::valueOf).toList();
return values;
}
}
错误是:
could not insert...
...
Caused by: org.postgresql.util.PSQLException: Unsupported Types value: 21,685,669
我缺少什么?
Trying to figure out how to store a list of enums in a single table column.
I started with a String
and it worked. I'll show only the relevant parts of the code:
import com.vladmihalcea.hibernate.type.array.ListArrayType;
...
@Entity
@TypeDefs({
@TypeDef(
name = "list-array",
typeClass = ListArrayType.class
)
})
@Table(name = "reports")
public class Reports {
...
@Type( type = "list-array" )
@Column(
name = "origins",
columnDefinition = "varchar[]",
nullable = false
)
private List<String> origins;
...
The corresponding DDL of the column in PostgreSQL is defined as
origins _varchar NULL
In Liquibase script:
<column name="origins" type="varchar[]" remarks=""/>
However when I tried to store enums with the following changes to the code (I basically changed the type and the corresponding getters/setters)
private List<Origin> origins;
The enum code looks so:
public enum Origin {
A, B, C
}
I got the error:
nested exception is org.hibernate.MappingException: Could not instantiate Type: com.vladmihalcea.hibernate.type.array.ListArrayType
I also tried it with a converter but without success:
@Column(
name = "origins",
columnDefinition = "varchar[]",
nullable = false
)
@Convert(converter = OriginConverter.class)
private List<Origin> origins;
The converter code is below:
@Converter
public class OriginConverter implements AttributeConverter<List<Origin>, List<String>> {
@Override
public List<String> convertToDatabaseColumn(List<Origin> origins) {
List<String> values = new ArrayList<>();
origins.forEach(
origin -> values.add(origin.name())
);
return values;
}
@Override
public List<Origin> convertToEntityAttribute(List<String> origins) {
var values= origins.stream().map(Origin::valueOf).toList();
return values;
}
}
The error was:
could not insert...
...
Caused by: org.postgresql.util.PSQLException: Unsupported Types value: 21,685,669
What am I missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论