web-dev-qa-db-ja.com

フィールドのフィールドで検索するSpringデータリポジトリメソッド

ユーザーと登録ユーザーの2つのエンティティがあります。

登録済みユーザーには、ユーザータイプのフィールドがあります。この登録済みユーザーエンティティに関連するSpringデータリポジトリに、登録済みユーザーに接続しているユーザーのユーザー名ですべての登録済みユーザーを検索するメソッドを用意したいと思います。

したがって、これは関連付けられたユーザーフィールドを持つ登録済みユーザーエンティティです。

@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;
    ...
}
13
nbro

Spring Data(少なくとも1.12.xバージョン)は PropertyPath#from メソッドを使用して、メソッド名から構築された述語のプロパティへのパスを抽出します。 sources によると、「フィールドセパレータ」としてアンダースコアが使用されます。したがって、最初のバリアントは次のとおりです

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

フィールド名全体が見つからない場合に大文字をフィールドセパレータとして扱うコードもあります。したがって、userUsernameRegisteredUserフィールドがない場合、2番目のバリアントは

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