java - Spring 启动: How to avoid too many JPA repositories for each domain class

标签 java hibernate spring-boot spring-data-jpa

我正在构建一个 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/

相关文章:

java - 在 spring-boot 中从 application.yaml 文件中读取 SSH 私钥?

java - Spring 启动,jdbcTemplate,Java

Java:如何禁用 JSpinner 蜂鸣声

Java String.split() 分割每个字符而不是给定的正则表达式

java - 通过 Spring/Hibernate 批量插入需要 id 的地方

java - HQL有什么好处?

web-services - Java 网络服务不适用于 Jdk 6 和 Jboss 5.x

java - 如何在 Eclipse (Juno) 中的 Glassfish 4.0 上运行 JMS 应用程序

java - 使用 IP 地址作为我的 Web 应用程序的 URL 时无法检索数据

spring-boot - Zuul -> Eureka 服务器,基本认证问题