繁体   English   中英

是否可以使用继承自定义Jpa存储库?

[英]Is it possible to customize Jpa Repository with inheritance?

假设我有两个类: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
}
}

然后想创造ClientRepositorySubjectRepository继承有机会获得saveEncrypted方法。

@Repository
public interface ClientRepository extends SubjectRepository<Client> {
}

但是当涉及到编译我得到:

创建名为'clientRepository'的bean时出错:init方法的调用失败; 嵌套异常是java.lang.IllegalArgumentException:无法为方法public abstract void com.path.repositories.CustomSubjectRepository.saveEncrypted(com.path.models.Subject)创建查询! 找不到类型Client的属性saveEncrypted!

您正在扩展接口,这样Spring将尝试创建名为saveEncrypted的查询,而不是使用自定义方法。

我相信最好的解决方案是扩展CustomSubjectRepositoryImpl类。

@Repository
public class ClientRepository extends CustomSubjectRepositoryImpl<Client> {
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM