【发布时间】:2015-02-09 21:51:41
【问题描述】:
我正在尝试使用 Hibernate 注释将地图列表映射到一个类中。
我希望我的最后一堂课看起来像这样:
@Entity
@Table(name = "PERSON")
public class Person {
@Id
@GeneratedValue
private long id;
@OneToMany(mappedBy = "person")
private List<Map<String, Trip>> trips;
}
Trip 表有一个行程编号,每个行程的多行包含行程经过的状态。
@Entity
@Table(name = "TRIP")
public class Trip {
@Id
@GeneratedValue
private long id;
@Column(name = "PERSON_ID")
private Person person;
@Column(name = "TRIP_NO")
private int trip_no;
@Column(name = "STATE")
private String state;
...
}
所以 TRIP 表有这些列:
Name Type
ID NUMBER(9)
PERSON_ID NUMBER(9)
TRIP_NO LONG
STATE VARCHAR2(16)
.
.
.
ID PERSON_ID TRIP_NO STATE ...
1 1 1 MN ...
2 1 1 WI ...
3 1 2 ND ...
4 1 2 MT ...
5 2 1 IA ...
所以在Map的List中,TRIP_NO是List的索引,STATE是Map的key。 1人去了2趟,第一次去明尼苏达州和威斯康星州,第二次去北达科他州和蒙大拿州。第 2 个人去过爱荷华州 1 次。
我在浏览如何指定此配置时遇到问题。
第二个问题:没有 JPA 2 可以做到吗?
【问题讨论】:
-
@OneToMany注释和朋友描述了数据库实体之间的关系。我无法确定Map<String, Trip>是什么实体。 -
Map
正在映射一组以状态为键的行程数据。因此,地图将包含所有具有相同 TRIP_NO 的行程,以及由行程所在州键入的人员。所以, person1.getTrips().get(1) is {{"MN", tripdata1},{"WI", tripdata2}}。person1.getTrips().get(2) is {{"ND", tripdata1}, {"MT", tripdata2}}。person2.getTrips().get(1) is {{"IA", tripdata1}}. -
啊,我明白了。那么您的 TRIP 表中的信息太多了。它包含旅行和旅行目的地实体。请参阅我发布的答案。
标签: java hibernate jakarta-ee jpa