2012-08-16 2 views
2

가정하자 나는데이터베이스에서 엔티티를 가져 오지 않고 JPA에서 엔티티의 ID를 가져 오겠습니까?

@Entity 
public class Foo { 
    @Id 
    private Integer id; 

    @Column(...) 
    private String data; 
} 

@Entity 
public class Bar { 
    @Id 
    private Integer id; 

    @OneToOne(fetchType=LAZY) 
    @JoinColumn(name="foo_fk") 
    private Foo foo; 

    @Column(...) 
    private String x; 

    @Column(...) 
    private String y; 
} 

내가 예를 SELECT Bar b FROM Bar WHERE b.x = :xValue에 대한 몇 가지 검색 기준에 맞는 모든 바 개체를 찾을 수있다 싶은 것은 내가하고 싶은으로 반복 일대일 관계를 다음과 같은 두 가지 JPA 엔티티입니다했다 결과는 foo의 기본 키와 값의 라인을 따라 y ie 코드를 설정하고 추출합니다. 내가 bar.getFoo().getId() 을 수행 할 때의 [선택] ORM 문제를 가지고있다 않도록하려면 무엇

List<Bar> results = // query to get all the results that meet value x 
for(Bar bar: results) { 
    String x = bar.getX(); 
    String y = bar.getY(); 
    Integer fooId = bar.getFoo().getId(); // at this point Hibernate pulls back foo from the db 
    // do something with x,y and fooId 
} 

. SELECT new com.example.MyResult(b.x,b.y,b.foo.id) FORM Bar b WHERE b.x = :xValue

보고서 쿼리를 작성하지 않고 bar.getFoo().getId()에 대한 선택을 피할 수있는 방법이 있습니까? 나는 Hibernate 3.6.10과 JPA 2를 사용하고있다. 내가 원하는 것을 할 수 있다면 Hibernate 4.1.x로 업그레이드하는 것이 행복하다.

답변

2
SELECT b.foo.id FROM Bar b WHERE b.x = :something 

이것은 ID를 제공하지만 ORM 계층에서 ID를 얻는 방법에 대해서는 보증 할 수 없습니다. 네이티브 쿼리를 완벽하게 제어하려면 직접 작성하십시오.

+0

Atleast with Hibernate + Postgres는 전체 객체를 되 돌리지 않을 것입니다 (나는 당신의 걱정이라고 생각합니다). 아마도 select select select를 만들거나 dummy inner inner join을 사용하여이를 보장 할 수 있습니다. –

+0

@Adam 더미 내부 결합을 사용하여 기술의 예를 들어 줄 수 있습니까? – ams

0

바의 연관성은 분명히 게으르며, 열망하면 도움이 될 것입니다.

관련 문제