因为我没有在 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
和
但我不认为这些解决方案是有用的,我不完全理解如何使用它们来解决问题 .
谢谢,
基督教
1 回答
在
QuerydslRepositorySupport
下创建通用getById的一种方法是这样的