java - HIBERNATE:如何使用带有逗号分隔内容的 varchar 列作为实体中的列表

标签 java hibernate

如何在实体中使用 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/

相关文章:

java - 让音频流在 Java 中工作,获取格式错误的 URL 异常

java - 无法提交 JPA 事务 : Transaction marked as rollbackOnly

java - 使用OpenCV扫描文档

java - Android:蓝牙 - 如何读取传入数据

java - 将数据写入 csv 文件

java - hibernate 标准 : Joining table without a mapped association

java - 删除 Hibernate 中的类 id

java.lang.ClassNotFoundException : org. hibernate.collection.internal.PersistentBag - 找不到我正在寻找的类

java - Hibernate - 一对多关系和 orphanRemoval 级联

java - 什么时候删除 Java 临时文件?