2017-12-08 3 views
0

저는 Spring JPA에 익숙하지 않습니다. (오히려 오랜 시간이 지났습니다.) JPA 저장소 작성에 도움이 필요합니다. 본인에게는 엔티티 클래스 인 일정과 사용자가 있습니다. 이 둘 사이에는 일대일 관계가 있습니다.일대일 관계에 대한 Spring JPA 쿼리를 작성하는 방법은 무엇입니까?

@Entity 
@Table(name = "ITINERARY") 
public class Itinerary implements Serializable { 

    @Id 
    @Column(name = "ID") 
    @GeneratedValue(generator = "Itinerary_IDGenerator", strategy = GenerationType.SEQUENCE) 
    @SequenceGenerator(name = "Itinerary_IDGenerator", sequenceName = "Itinerary_IDGenerator", allocationSize = 1) 
    private long id; 

    @Basic(optional = false) 
    @Column(nullable = false) 
    @Temporal(TemporalType.DATE) 
    private Date itineraryDate; 

    @OneToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "USER_ID") 
    User user; 
} 

@Entity 
@Table(name = "USER") 
public class User implements Serializable { 

    @Id 
    @Column(name = "ID") 
    @GeneratedValue(generator = "User_IDGenerator", strategy = GenerationType.SEQUENCE) 
    @SequenceGenerator(name = "User_IDGenerator", sequenceName = "User_IDGenerator", allocationSize = 1) 
    private long id; 

    @Basic(optional = false) 
    @Column(unique = true, nullable = false) 
    private String signInName; 
} 

내가합니다 (점은 지정된 singInName 포함) 사용자에 대한 일정을 반환하는 방법과 일정 기간이하는 여행 일정 엔터티에 대한 스프링 JPA 저장소를 쓰고 싶어요. 다음 인터페이스를 작성했지만 스프링 쿼리를 지정하는 방법을 모르겠습니다. 작동하는 JPA 쿼리를 제공했습니다.

public interface ItineraryRepository extends Repository<Itinerary, Long> { 

    //String queryStr = "select i from Itinerary i where i.user.signInName = '" + signedInUser + "' and i.itineraryDate = :today"; 

    @Query(select i from Itinerary i where i.user.signInName = :signInName and i.itineraryDate = :today) 
    Itinerary findBySignInNameAndDate(@Param("signInName") String signInName, @Param("itineraryDate") Date itineraryDate); 

} 

쿼리에 오류가 발생합니다.

Invalid derived query! No property signInName found for type Itinerary! 

Syntax error on tokens, delete these tokens 

어떻게 스프링 쿼리에이 쿼리를 변환합니까? 설명서에서 예제를 찾을 수 없습니다. 이것이 가능하고 저장소를 잘못 사용하고 있는지 확실하지 않습니다.

답변

0

저장소 인터페이스에서이 방법을 사용하십시오. 그리고 @Query

findByItineraryDateAndUser_SignInName(Date itineraryDate, String signInName); 

봄 데이터의 필요 (이어야 간단한 쿼리의 경우) 그것은 당신의 방법 이름을 기준으로 결과를 가져 오는 데 사용할 필요가 쿼리를 이해하기에 충분 지능형 없습니다.

User_SignInName은 속성 사용자 안의 signInName 속성을 찾도록 지정합니다.

관련 문제