2016-08-31 5 views
1

내 문제는이 작은 예제로 나눌 수 있습니다.
저는 엔티티 클래스 A와 엔티티 클래스 B가 있습니다. A에는 B 개체 목록이 있습니다. 이제 B 관련성은 항상 하나뿐입니다. 따라서 A의 B를 모두로드하고 싶지 않습니다.이 B에 액세스하려면 (A에 마지막으로 삽입 된 B) 액세스하십시오.
질문 : 서비스가없는 엔터티를 조작하여 @Transient 변수가 항상 최신 B가되도록 할 수 있습니까? 또한 A에서 최신 B를 별도로 저장하지 않고도이 작업을 수행 할 수 있습니까?Spring JPA OneToMany에서 OneToMany 중 첫 번째 항목 만

class B{ 
    @Id 
    @GeneratedValue 
    private Long id; 

    @Column(nullable=false) 
    private String name; 

    @Column(nullable=false) 
    private Date created = new Date(); 
} 

class A{ 
    @Id 
    @GeneratedValue 
    private Long id; 

    @OneToMany 
    @OrderBy("created ASC") 
    private List<B> b; 

    @Transient 
    private B newestB; // Here should be only the newest B 
} 

답변

0

예. 단순히 그것을 위해 게터를 추가하는 대신 변수로 최신 B를 저장 잊고 :

@Transient 
public B getNewestB() { 
    return b.get(b.size() -1); 
} 

bFetchType.EAGER로 설정되어 있다는 가정하에 문제를 해결할 것입니다. b의 getter 및 FetchType.LAZY을 사용하여 가져 오는 것은 AOP 프록시 호출을 사용하여 지연로드를 트리거하는 데 의존 할 수 있습니다 (실험해야 함).

그러나 이러한 두 접근 방식을 권장하지 않습니다. 비즈니스 로직을 Entity에 효과적으로 적용하려고합니다. 엔티티를 깨끗하게 유지하고 B의 저장소를 사용하여이 쿼리를 수행하는 것이 어떻습니까?

예.

public interface BRepository extends CrudRepository<B, Long> { 
    @Query(...) //query to get newest B for specified A 
    B getNewest(A a) 
}