假设我有一个可嵌入的类,它嵌入在如下所示的实体类中。

@Embeddable
public class FullName {
    private String firstName;
    private String lastName;
    // constructor, getters, setters, as needed
}

@Entity
public class Account {
    @Embedded
    private FullName fullName;
    // id, other data and methods
}


一个人可以拥有多个帐户,因此全名不是Account类的关键。我想拥有的是jpa信息库中的以下方法

public interface AccountRepository extends CrudRepository<Account, Long> {
    Collection<Account> findAllByFullName(FullName fullName);
}


最初,我认为这会起作用,但显然并不是那么简单。我无法获得像这样的方法。我认为唯一有帮助的是在FullName上实现equals方法,说具有相同的名字和姓氏的FullName相等,但这没有效果。

我现在最后要做的是:

public interface AccountRepository extends CrudRepository<Account, Long> {
    Collection<Account> findAllByFullNameFirstNameAndFullNameLastName(String firstName, String lastName);

    default Collection<Account> findAllByFullName(FullName fullName) {
        return findAllByFullNameFirstNameAndFullNameLastName(fullName.getFirstName(), fullName.getLastName());
    }
}


我有办法避免创建这种中间(可见)方法吗?

最佳答案

您可以按以下方式使用Example

Collection<Account> findAll(Example< Account > account);


然后将其传递为

FullName fullName = new FullName(fname, lname);

Account acc = new Account();
acc.setFullName(fullName);
Collection<Account> accounts = accountRepository.findAll(Example.of(acc));


希望能帮助到你。

10-04 15:10
查看更多