gpt4 book ai didi

java - 使用 JPA 2.1 将 EnumSet 映射到 mysql Set

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:01 26 4
gpt4 key购买 nike

我正在寻找将 EnumSet 存储在类型为 set 的 mysql 列中的方法:

@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')

SET in mysql docs

最佳答案

非常感谢!我不得不使用与您在这里使用的版本略有不同的版本。对我有用的是:

我有一个需要调整的权限枚举:

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

}

}

关于java - 使用 JPA 2.1 将 EnumSet 映射到 mysql Set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42136578/

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