2017-12-08 21 views
0

私はSpring JPAの新機能です(または長い時間が経っています)。JPAリポジトリの作成にはいくつかの助けが必要です。 私はエンティティクラスの旅程とユーザーを持っています。両者の間には1対1の関係があります。1対1リレーションシップの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; 
} 

私は(specifidの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

このメソッドは、リポジトリインタフェースで使用します。そして、必要はありません

findByItineraryDateAndUser_SignInName(Date itineraryDate, String signInName); 

@Queryの春データは(少なくとも単純なクエリの例では)それはあなたのメソッド名に基づいて結果をフェッチするために使用する必要があるもののクエリを理解するのに十分なインテリジェントです。

User_SignInNameプロパティユーザーの中でプロパティsignInNameを探すように指定しています。

関連する問題