【问题标题】:Spring Data Repository without specifying Entity没有指定实体的 Spring Data Repository
【发布时间】:2020-03-26 16:33:56
【问题描述】:

使用 Spring Data,您可以为给定实体创建一个存储库:

@Repository
public interface MyRepo extends CrudRepository<MyEntity, Long> {...}

但是,如果您有很多不与特定实体绑定的自定义查询呢?

以下都不起作用:

@Repository
public interface MyRepo {...}
@Repository
public interface MyRepo extends CrudRepository {...}
@Component
public interface MyRepo extends Repository {...}

等等..

基本上我想要的是能够将一些@Querys 封装到一个可注入的类或接口中。

【问题讨论】:

  • 认为link 会帮助你。
  • 不确定该链接是如何关联的。

标签: spring spring-boot spring-data-jpa spring-data


【解决方案1】:

您可以使用通用实体超类而不是具体实体。有一个抽象超类来声明实体的 id 或其他常见的东西是很常见的。

@MappedSuperclass
public abstract class AbstractEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }   
}

然后你可以像这样创建一个存储库并在你需要的地方自动装配:

public interface MyRepo extends JpaRepository<AbstractEntity, Long> {

    @Query("...")
    myQueryMethod();
}

也就是说,Spring Data 接口旨在与根实体一起使用。我认为如果你想避免它,你应该使用底层的JPA层(即使用EntityManager而不是Spring Data Repository来执行查询)。

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2018-09-16
    • 1970-01-01
    • 2016-01-12
    • 2015-01-11
    相关资源
    最近更新 更多