我正在尝试将自定义行为添加到基本的 Spring 数据 JPA 存储库中,并且已经根据此处列出的文档完成了 http://docs.spring.io/spring-data/jpa/docs/1.2.0.RELEASE/reference/html/#repositories.single-repository-behaviour
然而,框架似乎没有将该方法识别为客户方法,而是试图解析该方法的名称并创建一个查询。我得到此错误:org . spring framework . data . mapping . propertyreferenceexception:没有首先找到com . Klein . spring MVC 1 . entity . category类型的属性
这是我的自定义界面:
package com.klein.springmvc1.dao;
import com.klein.springmvc1.entity.Category;
public interface CategoryRepositoryCustom {
Category firstCategoryByName(String catagoryName);
}
下面是此接口的实现:
public class CategoryRepositoryCustomImpl implements CategoryRepositoryCustom {
@PersistenceContext(unitName="SpringMVC1")
EntityManager em;
private static final Logger logger = LoggerFactory.getLogger(CategoryController.class);
public Category firstCategoryByName(String catagoryName) {
logger.debug("In my custom repo");
Query q = em.createQuery("select category c from category where categoryName = " + catagoryName);
@SuppressWarnings("unchecked")
List<Category> categories = q.getResultList();
if (categories.size() > 0) {
return categories.get(0);
}
else
return null;
}
}
以下是我的存储库的界面定义:
public interface CategoryRepository extends CrudRepository<Category, Long>, CategoryRepositoryCustom {
List<Category> findByCategoryNameIgnoreCase(String catagoryName);
@Query("From Category c where c.categoryName like ?1%")
List<Category> findCategoryByStartsWithCategoryName(String categoryName);
List<Category> findByParentCategoryCategoryName(String categoryName);
}
这是我的上下文配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
>
<jpa:repositories base-package ="com.klein.springmvc1.dao"/>
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- <beans:bean id="customCategoryRepoImpl" class="com.klein.springmvc1.dao.CustomCategoryRepoImpl">
</beans:bean>
-->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven conversion-service="conversionService" />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.klein.springmvc1" />
<beans:bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<beans:property name="formatters">
<beans:set>
<beans:bean class="com.klein.springmvc1.MyDateAnnotationFormatterFactory"/>
<beans:bean class="com.klein.springmvc1.DateFormatter"/>
</beans:set>
</beans:property>
</beans:bean>
<beans:bean id="exceptionTranslator" class="org.springframework.orm.hibernate4.HibernateExceptionTranslator" />
<beans:bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" />
<beans:bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" />
<tx:annotation-driven/>
</beans:beans>
任何建议不胜感激。
默认情况下,< code>Spring-Data-JPA在实现自定义< code >存储库时,会查找带有< code>Impl后缀的< code >存储库,但由于您已将< code >命名为< code > categorypositorycustomimpl ,因此您需要将您的配置编辑为
<jpa:repositories base-package ="com.klein.springmvc1.dao" repository-impl-postfix="CustomImpl"/>
关于添加自定义行为的更多信息:http://docs . spring . io/spring-data/JPA/docs/current/reference/html/# repositories . custom-implementations
在我的项目中有几个实体具有相同的属性(对于示例'name'),所以,有可能创建一个存储库,其中使用自定义的select(实体)?因此,我从JpaRepository扩展了我的存储库,我扩展了MyCustomJpaRepository,MyCustomJpaRepository也扩展了JpaRepository,使其能够从JpaRepository授予基本功能? TKS
我使用的是Spring数据JPA1.10.11。释放 我有一个基础存储库,所有其他存储库都会扩展它。这部分有效。 我还想为一些要扩展的存储库声明一个自定义接口。所以我声明了一个接口和一个“Impl”类: 然后,我创建一个现有的工作存储库来扩展这个新接口: 注意:此存储库在扩展TestRepository之前工作,但是在如上扩展之后,应用程序上下文将无法以错误开始: 配置如下所示: 我觉得我一直在遵
如果我试图使用命令上传一个jar 但我在Nexus Repository Manager OSS中找不到这个选项卡。这应该在tab摘要之后,但它不在那里。
我发现对于减少样板非常有用,但它似乎给工作带来了麻烦。我现在试图用自定义的基类存储库扩展,而在启动时,Spring在正确实例化存储库方面遇到了问题。 我已经尝试了几个关于这个主题的变体,但是没有运气让事情成功地连线起来。我在Spring的问题跟踪器https://jira.spring.io/browse/datajpa-674上遇到了一个类似的问题,但没有关于修复的解释,只是对代码进行了重构,使
我最终不得不在文件。定义通常非常繁琐: 注意上面gradle提供了一种定义常用maven存储库的好方法(即)。我想在插件或父gradle脚本中找到一种方法,在函数中或静态地定义存储库,然后在块中调用它:。 我缺乏groovy方面的知识,因此我不太了解解析groovy源代码所需的知识,我正在寻找一种很好的方法来实现这一点。我该怎么做? 我知道在父级gradle文件中,我可以使用或。我不想将这些mav
如果你需要提供自定义文件存储 – 一个普遍的例子是在某个远程系统上储存文件 – 你可以通过定义一个自定义的储存类来实现。你需要遵循以下步骤: 1. 你的自定义储存类必须是django.core.files.storage.Storage的子类: from django.core.files.storage import Storage class MyStorage(Storage):