2017-04-23 86 views
0

我正在为variables表编写存储库,并希望使用它访问特定的行。对于这个我想自动装配主仓库到定制的实现,像这样:如何在Spring Data JPA中从cusom存储库访问主存储库?

public interface VariableRepo extends CrudRepository<Variable, Long>, VariableRepoCustom { 
    Variable getByName(String name); 
} 

public interface VariableRepoCustom { 
... 
    Variable getPopulationSingle(); 
... 
} 

public class VariableRepoCustomImpl implements VariableRepoCustom { 

    private final VariableRepo variableRepo; 

    @Autowired 
    public VariableRepoCustomImpl(VariableRepo variableRepo) { 
     this.variableRepo = variableRepo; 
    } 

    @Override 
    public Variable getPopulationSingle() { 
     return getByName("Population single"); 
    } 
... 
} 

不幸的是,春天喜欢去疯狂与此,抛出一个异常:

错误与名制作豆“variableRepo ':调用init 方法失败;嵌套异常是 org.springframework.data.mapping.PropertyReferenceException:否 property getPopulationSingle for type Variable!

I.e.它试图在实体类(Variable)内找到当然不应该包含在里面的存储库方法。

如何解决这个问题?

+2

您需要为您的自定义回购命名为impl'VariableRepoImpl' – mp911de

回答

0

你所说的VariableRepoCustom/VariableRepoCustomImpl实际上应该是一个服务(而不是根据spring-data-jpa的存储库)。

接口VariableRepoCustom不应该出现在JPA搜索路径,以防止JPA生成实现

+0

将自定义...移动到另一个包没有帮助。 – Dims

+0

你的JPA搜索路径是什么?如果将接口移出JPA搜索路径,JPA无法尝试生成实现 –

+0

在应用上下文中应该有这样的行:

0

我觉得可能是你的资料库IMPL没有@Repository注解。请将repository和impl作为@Repository。它应该解决你的问题。

对于最佳实践,无需自动将VariableRepo接口转换为impl类。

编辑: 也从impl中删除自定义。名称将通过append impl为RepoName。它的定义像VariableRepoImpl

+0

我没有看到这是必需的:http://docs.spring.io/spring-data/jpa/docs/2.0.x/reference/html/#repositories .definition – Dims

+0

我看到了,不需要自动装入repo into impl类 – iMBMT

+0

如何访问它呢? – Dims

相关问题