首页 > 解决方案 > blaze 持久性是否支持实体到哈希图的转换

问题描述

blaze 持久性是否支持实体到键值对的转换,EntityView 字段的名称也可以与实际 Entity 的名称不同

@Entity
@Table(name = "users")
public class User {

  @Column
  private String name;

  @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
  private Set<UserPropertyValue> userPropertyValues = new HashSet<>();

}

@Entity
@Table(name = "user_property_values")
public class UserPropertyValue {

  @Column
  private String value;

  @ManyToOne
  JoinColumn(name = "properties_id")
  private Property property;
}

@Entity
@Table(name = "properties")
public class Property {
  @Id
  private Long id;
  
  @Column
  private String name;
}

我想要这样的EntityView。

@EntityView(User.class)
interface UserView {
  private String getUserName();
  private HashMap<String, String>  userPropertyValues();
}

基本上name是这里的用户名userPropertyValues应该是 HashMap 包含:

  1. 键作为属性->名称
  2. 值作为PropertyValues ->

它还有助于创建自定义转换器,比如我想将 LocalDateTime 更改为具有各种不同格式/模式的 String 吗?

标签: javahibernatejpaspring-data-jpablaze-persistence

解决方案


当然,您可以使用@Mapping注释来指定 JPQL.Next 映射,如下所示:

@EntityView(User.class)
interface UserView {
  @Mapping("name")
  String getUserName();
  Set<UserPropertyValueView> getUserPropertyValues();
}
@EntityView(UserPropertyValue.class)
interface UserPropertyValueView {
  @Mapping("property.name")
  String getPropertyName();
  String getValue();
}

如果你真的想要一张地图,你也可以使用以下内容:

@EntityView(User.class)
public abstract class UserView {

  private final Map<String, String> values;

  public UserView(@Mapping("userPropertyValues") Set<UserPropertyValueView> values) {
    this.values = values.stream().collect(Collectors.toMap(UserPropertyValueView::getPropertyName, UserPropertyValueView::getValue))
  }

  @Mapping("name")
  public abstract String getUserName();
  public Map<String, String> getUserPropertyValues() {
    return values;
  }
}
@EntityView(UserPropertyValue.class)
interface UserPropertyValueView {
  @Mapping("property.name")
  String getPropertyName();
  String getValue();
}

通过注释映射映射键将在当前正在开发的最终 1.5.0 版本中引入:https ://github.com/Blazebit/blaze-persistence/issues/401


推荐阅读