2017-03-16 23 views
0

我正在構建一個包含超過10個需要在SQL數據庫中保存的域類的Spring Boot應用程序。 的問題是,我需要建立一個接口的每一個領域類,所以像這樣的每一個:Spring Boot:如何爲每個域類避免太多的JPA存儲庫

public interface BehandelaarRepo extends CrudRepository<BehandelCentrum, Long> { 

} 

有沒有辦法通過使用某種設計模式或減少倉庫數量隨你?有什麼建議麼?

回答

3

您可以實際使用泛型以同樣的方式春天數據JPA這有它自己的一些簡單:

public interface JpaRepository<T extends Serializable, ID extends Serializable> { 
    public <S extends T> S save(S object); 
} 

的技巧是,你可以使用所有的子類,而你得到一流的背以及。我總是創建一個超類,所以我擺脫我的ID通用的:

@MappedSuperclass 
public class JpaObject { 
    @Id 
    @GeneratedValue 
    private Long id; 
    (.... created, last updated, general stuff here....) 
} 

創建我@Entity類從這個JpaObject一個子類。

第二步:創建我的超級接口爲特殊查詢的未來用途:

@NoRepositoryBean 
public interface Dao<T extends JpaObject> extends JpaRepository<T, Long> { 
} 

下一步:一般的道,看起來有些愚蠢的,在任何時候都

@Repository 
public interface GenericDao extends Dao<JpaObject> { 
} 

現在有保持爲空在CrudRepository/JpaRepository中的保存方法的銳利看:

public <S extends T> S save(S object); 

現在,擴展JpaObject(S擴展JpaObject)的任何對象都可以作爲參數提供給所有方法,並且returntype與參數的類是相同的類。

(阿齊茲,ALS HET handiger是,菅直人HET OOK在HET荷蘭uitgelegd沃登:P Groet UIT茲沃勒)

+0

謝謝! Groet uit Utrecht :) – Aziz

+0

是否有這個解決方案的完整運行示例?謝謝! –

1

那麼,我有一個類似的問題。我通過創建新圖層解決了這個問題,即 RepositoryManager(或ModelService)單例,它擁有所有使用它們的repo接口和方法。

如果您希望您可以實現通過反射解析模型類型並選擇相應存儲庫的通用保存方法(然後調用該類ModelService)。

這對解耦緩存實現(我使用spring緩存)也很方便。

相關問題