我正在使用 Play Framework v1.2.5 和 JPA 和 Hibernate。
我有 2 个模型:
@Entity
public class MapTile extends Model {
// ...
@Required
public Integer tileOrder;
@Required
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
public List<MapBuildingInfo> buildingsInfo;
// ...
}
@Entity
public class MapBuildingInfo extends Model {
// ...
@Required
public Integer buildingsCount;
// ...
}
假设我有以下数据:
MapTile :
tileOrder: 1
buildingsInfo:
- buildingsCount : 1
- buildingsCount : 2
MapTile :
tileOrder: 2
buildingsInfo:
- buildingsCount : 3
- buildingsCount : 4
我正在尝试检索(只有一个查询和连接)所有MapTiles
及其对应的MapBuildingInfos
.
这是我使用的查询:
List<MapTile> list = MapTile.find("from MapTile tile left join fetch tile.buildingsInfo building").fetch();
这是我列表中的结果:
list[0].tileOrder => 1
list[0].buildingsInfo[0].buildingsCount => 1
list[0].buildingsInfo[0].buildingsCount => 2
list[1].tileOrder => 1
list[1].buildingsInfo[0].buildingsCount => 1
list[1].buildingsInfo[0].buildingsCount => 2
list[2].tileOrder => 2
list[2].buildingsInfo[0].buildingsCount => 3
list[2].buildingsInfo[0].buildingsCount => 4
list[3].tileOrder => 2
list[3].buildingsInfo[0].buildingsCount => 3
list[3].buildingsInfo[0].buildingsCount => 4
而不仅仅是:
list[0].tileOrder => 1
list[0].buildingsInfo[0].buildingsCount => 1
list[0].buildingsInfo[0].buildingsCount => 2
list[1].tileOrder => 2
list[1].buildingsInfo[0].buildingsCount => 3
list[1].buildingsInfo[0].buildingsCount => 4
似乎 Hibernate/JPA 将每个结果放入一个新的 MapTile 对象中,因此它创建了一个重复项。但是他正确地填写buildingsInfo
了。MapTile
我不明白为什么我会得到这个结果。你知道我做错了什么吗?你知道这是否是 Hibernate/JPA 的错误吗?还是我的错误?我怎样才能得到正确的结果?
谢谢您的帮助 !