このマッピングを持つ User エンティティがあります。
@OneToMany(mappedBy = "supervisor", fetch = LAZY, cascade = [CascadeType.REFRESH])
List<Group> supervisedGroups = new ArrayList<Group>()
およびこのマッピングを持つ Group エンティティ:
@ManyToOne(fetch = LAZY, cascade = [CascadeType.REFRESH])
@JoinColumn(name = "supervisor")
User supervisor
リポジトリのおかげでユーザーをフェッチします
User user = userRepository.findById(id)
findById メソッドはトランザクションによってラップされ (メソッドはトランザクション マネージャーのアドバイスによってインターセプトされます)、JPA の作業単位はリクエストが続く限り続きます (ビューごとのセッション)。
ユーザーを取得したら、
user.getSupervisedGroups()
これは空のリストを返します。コレクション型は Eclipselinks の IndirectList であり、size() メソッドを呼び出してもそれ以上のことはしません。
しかし、私が実行すると
entitymanager.refresh(user)
user.getSupervisedGroups()
次に、リストに2つのアイテムがあります...なぜですか?EclipseLink がコレクションでの LAZY フェッチをまったくサポートしていないということですか?