chr*_*yer 5 spring querydsl spring-data spring-data-jpa
由于我在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);
}
}
Run Code Online (Sandbox Code Playgroud)
实现的问题是我必须getById(final long id)
在每个具体的类中实现。我不想那样做。通常,spring 数据会自动了解每个实体。我也想拥有QueryDslRepositorySupport. 在我的示例中,它通常会生成如下内容:
select .. from concreteentity en where en.id = ...
Run Code Online (Sandbox Code Playgroud)
有办法解决吗?我已经偶然发现 Spring Jpa 将自定义功能添加到所有存储库,同时将其他自定义功能添加到单个存储库
和
但我认为这些解决方案没有帮助,我也不完全了解如何使用它们来解决问题。
谢谢,
基督教
创建通用 getById 的一种方法QuerydslRepositorySupport如下
T getById(long id) {
return getEntityManager().find(getBuilder().getType(), id)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3723 次 |
| 最近记录: |