2016-05-12 8 views
3

私は2つのエンティティ、ユーザーと登録ユーザーを持っています。フィールドのフィールドで検索するSpringデータリポジトリのメソッド

登録ユーザーには、userというフィールドがあります。この登録ユーザーエンティティに関連するバネデータリポジトリに、登録ユーザーに接続されているユーザーのユーザー名で登録ユーザーをすべて検索する方法があります。

したがって、これは関連するユーザフィールドに登録されたユーザエンティティである:

@Entity 
public class RegisteredUser implements Serializable { 

    ... 
    @OneToOne 
    @JoinColumn(name = "USERNAME_FK") 
    private User user; 
    ... 
} 

これはユーザ名を持つユーザである:

@Entity 
public class User implements Serializable { 
    ... 
    @Id 
    @Column(nullable = false) 
    protected String username; 
    ... 
} 
+0

ですあなたはonetomany注釈を使うべきです – FuSsA

答えて

4

スプリングデータ(少なくとも1.12.xバージョン)メソッドPropertyPath#fromを使用して、メソッド名から構築された述語のプロパティへのパスを抽出します。 sourcesによれば、 "フィールドセパレータ"としてアンダースコアが使用されています。全体のフィールド名が見つからない場合、フィールド区切り文字として大文字の文字を扱うコードもあり

public interface RegisteredUserRepository extends CrudRepository<RegisteredUser,String> { 
    List<RegisteredUser> findRegisteredUserByUser_Username(String username); 
} 

を次のように第1の変異体です。ですから、RegisteredUser二バリアンでuserUsernameフィールドを持っていない場合は、私が思う.. .. uは同じregistereduserのために多くのユーザーを見つける傾けることを意味Uはこの2つのエンティティ間onetooneマッピングを使用している

public interface RegisteredUserRepository extends CrudRepository<RegisteredUser,String> { 
    List<RegisteredUser> findRegisteredUserByUserUsername(String username); 
} 
+0

2番目のオプションは働きました(最初は試していませんでした)、ありがとう。ちなみに、1対1の関係であるため、1人の登録ユーザーを探したかったので、最後のメソッドシグニチャーは 'findOneRegisteredUserByUserUsername(String username)'でした。 – nbro

関連する問題