24

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

登録済みユーザーには、タイプ user のフィールドがあります。この登録ユーザーエンティティに関連する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;
    ...
}
4

2 に答える 2

29

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

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

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

public interface RegisteredUserRepository extends CrudRepository<RegisteredUser,String> {
    List<RegisteredUser> findRegisteredUserByUserUsername(String username);
}
于 2016-05-12T21:16:11.920 に答える