【发布时间】:2020-02-21 13:54:05
【问题描述】:
我有这样的实体:
Bonus_Request 实体:
@Entity
@Table(name = "bonus_request")
public class BonusRequest {
//some code above...
@OneToMany(fetch = FetchType.EAGER, mappedBy = "bonusRequest")
@JsonManagedReference(value = "parameter-bonus_request")
private Set<BonusRequestParameter> parameters;
}
Bonus_Request_Parameter 实体:
@Entity
@Table(name = "bonus_request_parameter")
public class BonusRequestParameter {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Size(max = 30)
@Column(name = "parameter", nullable = false)
private String parameter;
@Size(max = 50)
@Column(name = "value", nullable = false)
private String value;
@JoinColumn(name = "bonus_request_id", nullable = false)
@ManyToOne(fetch = FetchType.LAZY)
@JsonBackReference(value = "parameter-bonus_request")
private BonusRequest bonusRequest;
}
我想知道是否可以将 BonusRequestParameter 实体映射为 BonusRequest 实体中的 java.util.Map 字段。
例如:
@Entity
@Table(name = "bonus_request")
public class BonusRequest {
@OneToMany(fetch = FetchType.EAGER, mappedBy = "bonusRequest")
private Map<String, String> parameters; //String parameter, String value
}
我用:
- Spring Data JPA - 2.1.7
- PostgreSQL 数据库 - 10.7
【问题讨论】:
-
实体编号您可以使用映射吗,是的,使用
@ElementCollection并为key.value 等提供映射。但是看起来这也有一个单独的主键@ElementCollection将不起作用,因为插入时不会生成一个主键。因此,除非您可以放弃该列并将bonus_request_id和parameter列设为复合键(或唯一键),否则它将不起作用。 \ -
它也可以映射为私有
Map<String, BonusRequestParameter>,详见此处:stackoverflow.com/questions/25439813/… 和此处en.wikibooks.org/wiki/Java_Persistence/…
标签: spring postgresql spring-data-jpa mapping