我正在构建一个 Spring Boot 应用程序,其中包含 10 多个需要保存在 SQL 数据库中的域类。 问题是我需要为每个域类创建一个接口(interface),因此每个域类都是这样的:
public interface BehandelaarRepo extends CrudRepository<BehandelCentrum, Long> {
}
有没有办法通过使用某种设计模式或其他方式来减少存储库的数量?有什么建议吗?
最佳答案
实际上,您可以通过使用泛型来让自己变得更容易,就像 Spring Data JPA 的做法一样:
public interface JpaRepository<T extends Serializable, ID extends Serializable> {
public <S extends T> S save(S object);
}
诀窍是您可以使用所有子类,并且您也可以恢复该类。我总是创建一个父类(super class),所以我去掉了我的 ID 泛型:
@MappedSuperclass
public class JpaObject {
@Id
@GeneratedValue
private Long id;
(.... created, last updated, general stuff here....)
}
我创建我的 @Entity 类作为此 JpaObject 的子类。
第二步:创建我的 super 接口(interface)以供将来使用特殊查询:
@NoRepositoryBean
public interface Dao<T extends JpaObject> extends JpaRepository<T, Long> {
}
下一步:通用的 Dao 看起来有些愚蠢并且始终保持空状态
@Repository
public interface GenericDao extends Dao<JpaObject> {
}
现在仔细看看 CrudRepository/JpaRepository 中的保存方法:
public <S extends T> S save(S object);
任何扩展 JpaObject 的对象(S 扩展 JpaObject)现在都可以作为所有方法的参数,并且返回类型与您的参数是同一类。
(Aziz, als het handiger is, kan het ook in het Nederlands uitgelegd worden :P Groet uit Zwolle)
关于java - Spring 启动: How to avoid too many JPA repositories for each domain class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42831907/