java - 如何重用 Spring Data JpaRepository 接口(interface)

标签 java spring oop spring-data-jpa

(使用 Java 8)

我有一个在持久层中使用的 Spring Data JPA 存储库接口(interface)。它负责表 A。

接口(interface)代码如下:

package com.bla.bla.persistence;

import com.bla.bla..EntityA;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Transactional
public interface TableAJPARepository extends JpaRepository<EntityA, Long> {

    @Query("select distinct i.username from EntityA i")
    List<Integer> findDistinctUsernames();

    @Modifying
    @Query("update EntityA i set i.firstName = ?3 where i.lastName = ?1 and i.age < ?2")
    int updateEntityA(Integer age, String firstName, String lastName);

    @Query("select i from EntityA i where i.firstName = ?1 and (i.age =?2 or i.lastName =?3)")
    List<EntityA> findByFirstNameAndAgeOrLastName(String firstName, Integer age, String lastName);

    @Query("select DISTINCT(i) from EntityA i, EntityA1 r  where r.bookId=i.id " +
            "and i.firstName=?1 and r.title=?2 and i.lastName=?3 and i.age!=2 and i.age<=?4 " +
            "order by i.firstName Desc, i.age DESC ")
    List<EntityA> findBySomeFields(String firstName, String title, String lastName, Integer age,  Pageable pageable);
    ...
}

一些查询与辅助表 A1 连接。

我现在有表 B,除了名称之外,它与表 A 相同。表 B 使用表 B1 进行连接,与表 A1 相同。

该接口(interface)有很多方法,我不想重复代码。

是否有任何方法可以创建一个与 TableAJPARepository 完全相同但处理表 B 和 B1 的接口(interface)?

最佳答案

您可以考虑创建一个自定义存储库 - 请注意 @NoRepositoryBean 注释 -

import org.springframework.data.repository.*;

@NoRepositoryBean
public interface YourRepository<T, ID extends Serializable> extends Repository<T, ID> {
}

第一个方法不需要 @Query,因为 Distinct 是 spring jpa 上的方法名称选项 -

List<T> findDistinctUsernames();

我需要考虑一下更新 - 但你可能会使用泛型来实现这一点

关于java - 如何重用 Spring Data JpaRepository 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39226883/

相关文章:

绘图时 JPanel 上的 Java 不需要的边框

如果 Http 状态为 500,Spring RestTemplate 总是抛出异常

java - 从 Spring-JMS 处理 JMS 消息的最快方法

javascript - for 循环不适用于对象

c# - 在 .NET 中使用来自另一个程序集的抽象类

java - 当App被推送到后台并重新创建时,RecyclerView未恢复LayoutManager状态

java - 在 Java 中为 JTextField 显示事件?

java - 从 Java 调用时隐藏 BAT 文件窗口

java - spring 中对/oauth/token 的选项请求未授权 401

ruby - 在 Ruby 中继承可以进行类型转换吗?