如何在实体中使用 varchar 列作为列表? 而不是像另一张 table 一样坚持下去? 内容以逗号分隔。
....
@Column
private List<FlagChave> flags= new ArrayList();
....
CREATE TABLE "ENTITY" (
"ID" BIGINT NOT NULL ,
"FLAGS" VARCHAR(255 OCTETS) )
最佳答案
实体:::
....
@Column
@Convert(converter = StringToListFlagConverter.class)
private List<FlagChave> flags= new ArrayList();
....
类转换器。
@Converter
public class StringToListFlagConverter implements AttributeConverter<List<FlagChave>, String> {
@Override
public String convertToDatabaseColumn(List<FlagChave> flagChaves) {
if(!Optional.ofNullable(flagChaves).isPresent()) return "";
return flagChaves.stream().map(FlagChave::toString).collect(Collectors.joining(","));
}
@Override
public List<FlagChave> convertToEntityAttribute(String joined) {
if(!Optional.ofNullable(joined).filter(s -> !s.isEmpty()).isPresent()) return new ArrayList<>();
return
Arrays.asList(
joined.split(","))
.stream()
.map(FlagChave::valueOf).collect(toCollection(ArrayList::new)
);
}
}
类枚举。我是用枚举创建的,但你可以用字符串来创建。
public enum FlagChave {
CHAVE,
VALOR_PADRAO,
CONDENSAR_LINHAS;
@Override
public String toString() {
return super.toString();
}
}
关于java - HIBERNATE:如何使用带有逗号分隔内容的 varchar 列作为实体中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67441769/