【问题标题】:Does blaze persistence support entity to hashmap conversionblaze 持久性是否支持实体到哈希图的转换
【发布时间】:2020-08-13 16:44:26
【问题描述】:

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

@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();
}

基本上 nameusername 这里 userPropertyValues 应该是 HashMap 包含:

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

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

【问题讨论】:

标签: java hibernate jpa spring-data-jpa blaze-persistence


【解决方案1】:

当然,您可以使用 @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

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多