首页 文章

将QueryDslRepositorySupport与接口存储库结合使用

提问于
浏览
4

因为我没有在 Spring 季论坛上得到回复,所以我会在这里尝试一下 .

有没有办法通过以下方式扩展接口扩展的公共接口存储库:

@NoRepositoryBean
public interface CommonRepository<T> extends JpaRepository<T, Long>, QueryDslPredicateExecutor<T> {
 T getById(final long id);
}

@Repository
public interface ConcreteRepository extends CommonRepository<ConcreteEntity> {
  List<ConcreteEntity> getByNameAndAddress(final String name, final String address);
}

public class ConcreteRepositoryImpl extends QueryDslRepositorySupport implements ConcreteRepository {

    private BooleanExpression nameEquals(final QConcreteEntity entity, final String name) {
        return entity.eq(name);
    }

    public List<ConcreteEntity> getByNameAndAddress(final String name, final String address) {
        QConcreteEntity entity = QConcreteEntity.concreteEntity;
        return from(entity).where(entity.name.eq(name).and(entity.address.eq(address))).list(entity);
    }
}

实现的问题是我必须在每个具体类中实现 getById(final long id) . 我不想那样做 . 通常,spring数据会自动了解每个实体 . 另外我想拥有 QueryDslRepositorySupport 的功能 . 在我的例子中,它通常生成如下内容:

select .. from concreteentity en where en.id = ...

有办法解决吗?我已经偶然发现Spring Jpa adding custom functionality to all repositories and at the same time other custom funcs to a single repository

http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/repositories.html#repositories.custom-implementations

但我不认为这些解决方案是有用的,我不完全理解如何使用它们来解决问题 .

谢谢,

基督教

1 回答

  • 0

    QuerydslRepositorySupport 下创建通用getById的一种方法是这样的

    T getById(long id) {
        return getEntityManager().find(getBuilder().getType(), id)
    }
    

相关问题