[오류(오류 63;)]EclipseLink 2.5.2 lambda에서 ManyToOne 관계가 움직이지 않음

전제 조건


이러한 OneToMany/ManyToOne 솔리드가 있다고 가정합니다.
하위 솔리드 STREET에는 모 솔리드 CITY가 있습니다.
+-------+ (1)   (n) +--------+
| CITY  |-----------| STREET |
+-------+           +--------+
프로그램은 이런 느낌이다.
City.java
@Entity
class City {
  @OneToMany(mappedBy="city")
  private List<Street> streetList;
}
Street.java
@Entity
class Street {
  @ManyToOne
  private City city;

  public City getCity() {
    return city;
  }
}

문제.


하위 엔티티 "STREET"를 가져오더라도 lambda에서 상위 엔티티 "CITY"를 가져오려면 SQL이 실행되지 않으며 가져올 수 없습니다.
Test.java
class Test {
  @PersistenceContext
  private EntityManager em;

  public void test {
    em.createQuery("SELECT s FROM Street s", Street.class)
      .getResultList()
      .stream()
      .forEach(x -> System.out.println(x.getCity().toString())); // ← ダメ
  }

까닭


EclipsseLink 2.5.2의 구린내 나는 벌레인 것 같다.2.6 고쳤다.
그러니까 글래스피쉬 4.1은 위선

회피책


그 1@JoinFetch


하위 솔리드@JoinFetch, 상위 솔리드를 미리 가져옵니다.
Street.java
@Entity
class Street {
  @ManyToOne
  @JoinFetch             // ←追加
  private City city;

  public City getCity() {
    return city;
  }
}

그 2lambda를 사용하지 않습니다.


뭐랄까, EclipseLink와 lambda는 마음이 맞지 않아...
2015.1.28 추기
글의 철자가 틀렸다.
× lamda
○ lambda
× Eclipse 2.5.2
○ EclipseLink 2.5.2
@laughter선생님, @tag1216선생님, 편집 요청에 감사드립니다.
@deaf_tadashi 메모 감사합니다.

좋은 웹페이지 즐겨찾기