2017-05-08 2 views
0

LAZY OneToOne 관계가 있고 이며 사용 당로드하려고합니다. (동일한 모델에는 OneToOne 관계가 더 많아서 데이터베이스에 쿼리하는 횟수가 적습니다.)스프링 JPA LAZY로드 OneToOne 관계가로드되지 않습니다.

로그 파일의 원시 db 쿼리를 보면 에 액세스하려고 시도하지 않을 때 SELECT FROM City... 문을 인쇄 할 수 없습니다.

하지만 user.city에 액세스 할 때 SQL 문이 로그에서 실행되는 것을 볼 수 있습니다. 클래스 인스턴스가 나타납니다.

이 코드는 :

@Entity 
@Table(
    indexes={@Index(name = "name", columnList="name")} 
) 
public class City { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public Long id; 

    @JsonIgnore 
    @ManyToOne(fetch = FetchType.LAZY) 
    public State state; 

    public String name; 
    public String accentName; 

    @Column(name = "location", columnDefinition = "POINT") 
    public Point location; 
} 

:

System.out.println(user.city); 
System.out.println(user.city.location); 

Hibernate: 
    select 
     city0_.id as id1_3_0_, 
     city0_.accentName as accentNa2_3_0_, 
     city0_.location as location3_3_0_, 
     city0_.name as name4_3_0_, 
     city0_.state_id as state_id5_3_0_ 
    from 
     City city0_ 
    where 
     city0_.id=? 
[email protected] 
null 

천 멋진 내 모델입니다 인쇄 할 수 있지만 모두가 City 기업이다 null 내부에 가득 아래에 더 많은 정보를 볼 수


그냥

이 도움을 주셔서 대단히 감사합니다 .. @OneToOne(fetch = FetchType.EAGER)으로이 테스트 할 때 모두가 잘 작동하고 있음을 언급한다.

+0

설정자가 없거나 @Entity (access = AccessType.FIELD)에 문제가 있습니까? – maszter

+0

@maszter 내 필드가 공개되어있어 'r @Entity (access = AccessType.FIELD)에 문제가 있습니까?' –

답변

0

나는 일대일 방식을 사용하지 않을 것입니다.

@OneToMany city; (상태 : 상태 클래스

...

@ManyToOne state; ((FetchType.EAGER, CascadeType.ALL, mappedBy='city')을 나는 보통 다른에 대한 게으른, 한면에 대한 열망 할) : 도시 클래스의

... 많은 도시를 가지고있다).

정확한 ID를 가진 올바른 도시를 추가하는 로그의 INSERT 문을 사용하고 있습니까?

모든 코드를 보지 않고서는 알 수 없습니다.

+0

여기 도시 클래스는 사용자와 관계가 없습니다. 이 도시는 많은 사용자가 사용할 수 있기 때문에 –

+0

또한 사용자가 추상 클래스로 된 이유를 모르겠습니다. 그게 맞습니까? – Dexter

+0

이전에 상속을 사용했기 때문에 baseUser는 나중에 다시 시도 할 수 있습니다. BaseUser를 확장 한 User 클래스가 있는데이 클래스가 관련 될 수 있다고 생각하십니까? –