[英]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
}
}
然后想創造ClientRepository和SubjectRepository繼承有機會獲得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.