Rob*_*_UK 1 java mongodb jpa-2.0 spring-boot
我的项目中有以下两个存储库类。
@Repository
public interface AuditRepository extends MongoRepository<AuditEntity, String> {
}
Run Code Online (Sandbox Code Playgroud)
还有一种具有更复杂的查询。
@Service
public class AuditCriteriaRepository {
private final MongoTemplate mongoTemplate;
public AuditCriteriaRepository(MongoTemplate mongoTemplate){
this.mongoTemplate = mongoTemplate;
}
public List<AuditEntity > getAuditEntitiesByStatus(AuditStatus auditStatus, Instant instant){
Query query = new Query();
query.addCriteria(Criteria.where("status")
.is(auditStatus)
).addCriteria(Criteria.where("createdAt").lt(instant));
return mongoTemplate.find(query, AuditEntity.class);
}
}
Run Code Online (Sandbox Code Playgroud)
我现在遇到的问题是它们是作为单独的类自动连接的,如果我可以将两者合并为一个存储库类,我会更愿意,这样我就可以拥有默认的 CRUD 选项并构建标准选项。
关于如何做到这一点有什么建议/提示吗?
如果您不想自动装配两个不同的类,则可以使用自定义调用来扩展存储库。
例如,假设您创建了一个名为 的附加接口AuditCriteriaRepository,其中包含:
public interface AuditCriteriaRepository {
List<AuditEvent> getAuditEntitiesByStatus(AuditStatus auditStatus, Instant instant);
}
Run Code Online (Sandbox Code Playgroud)
之后,您可以AuditRepository使用新界面扩展您的功能:
public interface AuditRepository extends MongoRepository<AuditEntity, String>, AuditCriteriaRepository {
}
Run Code Online (Sandbox Code Playgroud)
此外,您必须AuditCriteriaRepository使用您编写的代码来实现:
public class AuditCriteriaRepositoryImpl implements AuditCriteriaRepository {
private final MongoTemplate mongoTemplate;
public AuditCriteriaRepository(MongoTemplate mongoTemplate){
this.mongoTemplate = mongoTemplate;
}
public List<AuditEntity > getAuditEntitiesByStatus(AuditStatus auditStatus, Instant instant){
Query query = new Query();
query.addCriteria(Criteria.where("status")
.is(auditStatus)
).addCriteria(Criteria.where("createdAt").lt(instant));
return mongoTemplate.find(query, AuditEntity.class);
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以自动装配AuditRepository并getAuditEntitiesByStatus()直接调用存储库本身。
| 归档时间: |
|
| 查看次数: |
4188 次 |
| 最近记录: |