一尘不染

Spring Boot:如何为每个域类避免太多的JPA存储库

spring-boot

我正在构建一个包含超过10个域类的Spring
Boot应用程序,这些域类需要保留在SQL数据库中。问题是我需要为每个单个域类创建一个接口,因此每个类都需要这样:

public interface BehandelaarRepo extends CrudRepository<BehandelCentrum, Long> {

}

有什么办法可以通过使用某种设计模式或其他方式来减少存储库的数量?有什么建议么?


阅读 245

收藏
2020-05-30

共1个答案

一尘不染

实际上,您可以像使用Spring Data 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....)
}

我从此JpaObject创建@Entity类作为子类。

第二步:创建我的超级接口,以供将来特殊查询的使用:

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

下一步:通用的Dao,看起来有些愚蠢,而且始终空着

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

现在仔细看一下CrudRepository / JpaRepository中的save方法:

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

现在,任何扩展JpaObject(S扩展JpaObject)的对象都可以作为参数提供给所有方法,并且returntype与您的参数属于同一类。

(阿齐兹(Aziz),阿尔斯·亨特(Al Het Handiger),荷兰内特兰(Nederlands uitgelegd worden)的坎·赫特(Kan
het ook):P Groet uit Zwolle

2020-05-30