假设我有一个可嵌入的类,它嵌入在如下所示的实体类中。
@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));
希望能帮助到你。