(使用 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/