簡體   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