假设我有两个类:Subject和Client,Subject是基本类。
@Entity
public class Client extends Subject
现在我想添加自定义的Jpa基本接口,因此可以在子接口中访问方法:
@NoRepositoryBean
public interface SubjectRepository <T extends Subject> extends
JpaRepository<T, Long>, CustomSubjectRepository<T> {}
CustomSubjectRepository 如下:
public interface CustomSubjectRepository<T extends Subject> {
void saveEncrypted(T subject);
}
我需要实现,所以我声明了一个类:
@Repository
@Transactional
public class CustomSubjectRepositoryImpl<T extends Subject> implements
CustomSubjectRepository<T> {
@PersistenceContext
private EntityManager entityManager;
@Override
public void saveEncrypted(T subject) {
//implementation
}
}
然后想要创建 ClientRepository 并从 SubjectRepository 继承以访问 saveEncrypted 方法。
@Repository
public interface ClientRepository extends SubjectRepository<Client> {
}
但是当涉及到编译时,我得到:
创建名称为'clientRepository'的bean时出错:初始化方法的调用失败;嵌套异常是java.lang.IllegalArgumentException:无法为方法public abstract void com.path.repositories.CustomSubjectRepository.saveEncrypted(com.path.models.Subject)创建查询!找不到客户端类型的属性saveEncrypted!
答案 0 :(得分:0)
您正在扩展接口,这样Spring会尝试创建一个名为saveEncrypted
的查询,而不是使用自定义方法。
我认为最好的解决方案是扩展类CustomSubjectRepositoryImpl
。
@Repository
public class ClientRepository extends CustomSubjectRepositoryImpl<Client> {
}