PlayFrameworkv1.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
すべてとそれに対応するを(1つのクエリと結合のみで)取得しようとしています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のバグかどうか知っていますか?または私からのエラー?どうすれば正しい結果を得ることができますか?
ご協力ありがとうございました !