java - 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 包含:
- 键作为属性->名称
- 值作为PropertyValues ->值
它还有助于创建自定义转换器,比如我想将 LocalDateTime 更改为具有各种不同格式/模式的 String 吗?
解决方案
当然,您可以使用@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
推荐阅读
- java - 如何在 Java 中为 Mongodb 创建动态查询
- dafny - 是否可以在 dafny 的构造函数中调用函数?
- mysql - 根据多列的值限制查询结果
- .net - Throw custome exception to filter
- python - 在每个点插入短片
- java - 如果我的脚本通过 Jenkins 在 BrowserStack 上运行,我如何通过 Selenium (Java) 脚本向特定的 Slack 通道发送消息
- python - 读取不同目录中的多个文件并将行号存储在列表中
- leaflet - LeafletJs:如何判断集群组的工具提示是否打开?
- python - Django 无密码自定义身份验证 request.user.is_authenticated' 总是返回 false
- json - Terraform HTTP 请求正文操作