필자는 손으로 작성한 JDBC ORM 코드에서 Ebeans으로 프로젝트를 전환하기 시작했습니다. 지금까지 그것은 아주 좋았습니다. Ebeans는 가볍고 사용하기 쉽습니다.JPA & Ebean ORM : 빈 콜렉션이 비어 있지 않습니다.
그러나 나는 비어 있어야하는 일대 다 목록을 검색 할 때 실제로 그 안에 하나의 요소가 있습니다. 이 요소는 모든 null 필드가있는 일종의 프록시 객체로 보이므로 컬렉션을 반복하는 코드가 중단됩니다. 여기
내가 포함 시켰 단축 정의 :
@Entity
class Store {
...
@OneToMany(mappedBy="store",cascade=CascadeType.ALL,fetch=FetchType.LAZY)
List<StoreAlbum> storeAlbums = new LinkedList<StoreAlbum>();
}
@Entity
class StoreAlbum {
...
@ManyToOne(optional=false,fetch=FetchType.EAGER)
@JoinColumn(name="store_id",nullable=false)
Store store;
}
그 ... 모든 표준 getter 및 setter이있는 곳입니다.
Store s = server.find(Store.class)
.where()
.eq("store_id",4)
.findUnique();
Assert.assertEquals("Sprint",s.getStoreName());
Assert.assertEquals(0, s.getStoreAlbums().size());
데이터베이스은 "스프린트"에 대한 '저장'행을 포함하는 것으로 알려져있다, 그리고 'store_album'테이블은 저장소에 대한 행이 포함되어 있지 않습니다 검색 코드는 다음과 같습니다.
JUnit 테스트는 두 번째 어설 션에서 실패합니다. 그것은 하나의 요소가있는 목록을 발견합니다. 이것은 어떤 종류의 손상된 StoreAlbum 객체입니다. 디버거는 객체가 "[email protected]"유형으로 표시되고 nullable = false (및 optional = false)로 선언 된 모든 필드에 대해 null 값을가집니다.
여기에 뭔가가 있습니까?
나는 SQL 디버깅을 켜고 쿼리가 store_album 테이블 중 하나 인 "왼쪽 외부 조인"을 수행하고 있음을 발견했습니다. select t0.store_id c0, t0.store_name c1, t0.platform_name c2, t0.dsp_id C3, C4의 t1.store_id, t1.album_id의 C5, C6을 t1.dsp_id, 매장 T0 t1.pricecode_id로부터의 C7 는 t1.store_id = t0.store_id 여기서 t0.store_id = T1에 store_album의 가입 외측 왼쪽? 주문 t0.store_id 이 동작을 변경하는 방법이 있어야합니다. – homebrew