我正在尝试使用JPA和hibernate将枚举列表保留在数据库中。
我的模型如下:
protected void GrdOverview_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
foreach (TableCell tc in e.Row.Cells)
{
if (tc.HasControls())
{
// search for the header link
LinkButton lnk = (LinkButton)tc.Controls[0];
string sortDir = ViewState["SortDirection"] != null ? ViewState["SortDirection"].ToString() : "ASC";
string sortBy = ViewState["SortExpression"] != null ? ViewState["SortExpression"].ToString() : "---";
if (lnk != null && sortBy == lnk.CommandArgument)
{
string sortArrow = sortDir == "ASC" ? " ▲" : " ▼";
lnk.Text += sortArrow;
}
}
}
}
}
我想将@Id
@Column
String id;
@Column
@Convert(converter = EnumConverter.class)
List<Enum> listEnum;
的列表保留为enum
,并使用一个转换器(String
)来存储它并从数据库中读取它。
我的转换器使用Jackson进行序列化和反序列化。示例:
EnumConverter
我遇到的问题是将它存储得很好,但是当我尝试获取代码时,它像下面这样返回一个大小为1(类型@Converter(autoApply = true)
public class EnumListConverter implements AttributeConverter<List<Enum>, String> {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
public String convertToDatabaseColumn(final List<Enum> list) {
try {
return objectMapper.writeValueAsString(list);
} catch (JsonProcessingException e) {
return "";
}
}
@Override
public List<Enum> convertToEntityAttribute(final String list) {
try {
return Arrays.asList(objectMapper.readValue(list, Enum[].class));
} catch (IOException e) {
return new ArrayList<>();
}
}
}
)的数组,而不是一个数组。大小3:
ArrayList
我正在使用带有简单本机查询的"["Value1","Value2","Value3"]"
:
CrudRepository
有人知道我在想什么吗?我想使用三个值而不是一个值的SELECT list from the entity;
。当我调试转换器时,它做对了,所以问题必须在转换之后。