使用JPA 2.1将EnumSet映射到mysql Set [英] Mapping EnumSet to mysql Set using JPA 2.1
本文介绍了使用JPA 2.1将EnumSet映射到mysql Set的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在寻找将EnumSet存储在类型设置为mysql的列中的方法:
I am looking way to store EnumSet in mysql column with type set:
@Data
@Entity
@Table(name = "ENTITY_TABLE")
public class Entity implements Serializable {
@Id
@GeneratedValue
@Column(nullable = false)
@NotNull
private String id;
@Column(name = "types")
private EnumSet<Type> types;
}
类型的枚举定义如下:
public enum Type {
TYPE1,
TYPE2,
TYPE3,
TYPE4,
TYPE5
}
表定义如下:
CREATE TABLE `ENTITY_TABLE` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`types` set('TYPE1','TYPE2','TYPE3','TYPE4','TYPE5') DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
并插入表格:
INSERT INTO ENTITY_TABLE (types) VALUE ( 'TYPE1','TYPE2')
推荐答案
非常感谢!我必须使用与您在此处使用的版本稍有不同的版本.对我有用的是:
Thanks a lot! I had to use a slightly different version what you have here. What worked for me was:
我有一个需要调整的权限枚举:
I had an Enum of permissions that needed to be adjustable:
@Convert(converter = SetConverter.class)
@Column(name = "permission")
private EnumSet<Permission> permission;
//in a util and imported
...
@Converter
public static class SetConverter implements AttributeConverter<EnumSet<Permission>, String> {
public String convertToDatabaseColumn(EnumSet<Permission> attribute) {
StringBuilder sb = new StringBuilder();
for (Permission c : attribute) {
sb.append(c + ",");
}
return sb.toString();
}
public EnumSet<Permission> convertToEntityAttribute(String dbData) {
if (dbData == null) {
dbData = "";
}
EnumSet<Permission> perm = EnumSet.of(Permission.DEFAULT); //default was a value I added.
String[] persistencePermissions = StringUtils.trimAllWhitespace(dbData).toUpperCase().split(",");
if (!StringUtils.isEmpty(StringUtils.trimAllWhitespace(dbData))) {
try {
for (String str : persistencePermissions) {
perm.add(Permission.valueOf(str));
}}
catch (IllegalArgumentException IAE) {
throw new Exception("INVALID_REQUEST");
}}
return perm;
}
}
这篇关于使用JPA 2.1将EnumSet映射到mysql Set的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文