有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我的Spring数据配置没有自动连接存储库接口?

首先,我想欢迎大家,虽然我是一名新成员,但我经常是一名匿名用户,在这里搜索我的问题的可能答案:)

我的Spring数据配置有一个非常严重的问题,我已经和这个问题斗争了两天,现在我想到了各种可能性/ 我以前创建过使用Spring Data JPA功能的项目,但没有像现在这样有太多问题/ 在这个过程中,我研究了多个网站,对我的配置做了一些改变,但没有任何帮助/

在我的spring配置xml文件中,我创建了以下bean:BasicDataSource、LocalContainerEntityManagerFactoryBean和一个JpaTransactionManager。 顺便说一句: 我使用的是Spring 4.1.6、Spring Data release 1.8.0和hibernate 4.3.8。决赛

以下是Spring配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:repository="http://www.springframework.org/schema/data/repository"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.8.xsd
        http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.7.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

    <context:component-scan base-package="pl.mmalik.portlet.common.model" />
    <context:component-scan base-package="pl.mmalik.portlet.common.service" />

    <context:annotation-config />

    <context:property-placeholder location="classpath:springData/dataSource.properties"/> 

    <util:properties id="hibernateProperties" location="classpath:springData/hibernate.properties"/>

    <bean id="lifeRayDataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${connection.driverClassName}"/>
        <property name="url" value="${connection.url}"/>
        <property name="username" value="${db.username}"/>
        <property name="password" value="${db.password}"/>
        <property name="maxActive" value="128"/>
        <property name="maxIdle" value="64"/>
        <property name="minIdle" value="24"/>
        <property name="validationQuery" value="SELECT 1 FROM DUAL"/>
    </bean>

    <bean id="entityManagerFactory" 
          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="lifeRayDataSource"/>
        <property name="packagesToScan">
            <list>
                <value>pl.mmalik.portlet.common.domain.model</value>
            </list>
        </property>
        <property name="persistenceUnitName" value="LIFE-RAY-PU" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>
        <property name="jpaProperties" ref="hibernateProperties"/>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" primary="true">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>

    <jpa:repositories
            base-package="pl.mmalik.portlet.common.respository"
            entity-manager-factory-ref="entityManagerFactory"
            transaction-manager-ref="transactionManager" />

</beans>

我正在尝试创建一个JpaRepository接口,它将处理实体上的基本db操作

该实体如下:

@Entity
@Table(name = "Recipie")
public class Recipie {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "RecipiSeq")
    @SequenceGenerator(initialValue = 1,
                        name = "RecipiSeq",
                        sequenceName = "RecipiSeq",
                        allocationSize = 1)
    @Column(name = "RECIPIE_ID", unique = true)
    private Integer recipieId;

    @NotNull
    @Column(name = "RECIPIE_NAME")
    private String name;

    @NotNull
    @Column(name="RECIP_CAT")
    private String category;

    @NotNull
    @Size(max = 255)
    @Column
    private String description;

    @Digits(fraction = 0, integer = 3)
    @Column(name = "READY_IN")
    private Integer readyIn;

    @Column
    private String author;

    @Column(name="iconFile")
    private byte[] file;

    public Recipie() {
    }

    // Setters and getters are here...
}

存储库是一个扩展JpaRepository的小界面

public interface RecipieRepository extends JpaRepository<Recipie, Integer>{

}

在部署时,我得到一个“NoSuchBeanDefinitionException”,带有以下stacktrace:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'recipieMock': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private pl.mmalik.portlet.common.repositories.RecipieRepository pl.mmalik.portlet.common.domain.model.mock.RecipieMock.recipieRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [pl.mmalik.portlet.common.repositories.RecipieRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1210)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    at org.springframework.web.portlet.FrameworkPortlet.createPortletApplicationContext(FrameworkPortlet.java:368)
    at org.springframework.web.portlet.FrameworkPortlet.initPortletApplicationContext(FrameworkPortlet.java:297)
    at org.springframework.web.portlet.FrameworkPortlet.initPortletBean(FrameworkPortlet.java:271)
    at org.springframework.web.portlet.GenericPortletBean.init(GenericPortletBean.java:124)
    at javax.portlet.GenericPortlet.init(GenericPortlet.java:107)
    at com.liferay.portlet.InvokerPortletImpl.init(InvokerPortletImpl.java:269)
    at com.liferay.portlet.PortletInstanceFactoryImpl.init(PortletInstanceFactoryImpl.java:228)
    at com.liferay.portlet.PortletInstanceFactoryImpl.create(PortletInstanceFactoryImpl.java:145)
    at com.liferay.portlet.PortletInstanceFactoryUtil.create(PortletInstanceFactoryUtil.java:41)
    at com.liferay.portlet.PortletBagFactory.create(PortletBagFactory.java:337)
    at com.liferay.portal.deploy.hot.PortletHotDeployListener.doInvokeDeploy(PortletHotDeployListener.java:370)
    at com.liferay.portal.deploy.hot.PortletHotDeployListener.invokeDeploy(PortletHotDeployListener.java:125)
    at com.liferay.portal.deploy.hot.HotDeployImpl.doFireDeployEvent(HotDeployImpl.java:227)
    at com.liferay.portal.deploy.hot.HotDeployImpl.fireDeployEvent(HotDeployImpl.java:96)
    at com.liferay.portal.kernel.deploy.hot.HotDeployUtil.fireDeployEvent(HotDeployUtil.java:28)
    at com.liferay.portal.kernel.servlet.PluginContextListener.fireDeployEvent(PluginContextListener.java:164)
    at com.liferay.portal.kernel.servlet.PluginContextListener.doPortalInit(PluginContextListener.java:154)
    at com.liferay.portal.kernel.util.BasePortalLifecycle.portalInit(BasePortalLifecycle.java:44)
    at com.liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLifecycleUtil.java:74)
    at com.liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLifecycleUtil.java:58)
    at com.liferay.portal.kernel.util.BasePortalLifecycle.registerPortalLifecycle(BasePortalLifecycle.java:54)
    at com.liferay.portal.kernel.servlet.PluginContextListener.contextInitialized(PluginContextListener.java:116)
    at com.liferay.portal.kernel.servlet.SecurePluginContextListener.contextInitialized(SecurePluginContextListener.java:151)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3954)
    at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:426)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)
    at java.lang.Thread.run(Thread.java:662)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private pl.mmalik.portlet.common.repositories.RecipieRepository pl.mmalik.portlet.common.domain.model.mock.RecipieMock.recipieRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [pl.mmalik.portlet.common.repositories.RecipieRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ... 44 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [pl.mmalik.portlet.common.repositories.RecipieRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1301)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1047)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
    ... 46 more

我认为这与我对EntityManager或DataSource的配置有关,但研究这些元素的其他配置选项并没有给我带来任何好处/

如果有任何建议,我将不胜感激,我完全无法接受。 如果你需要任何关于配置的额外信息,我会更新这篇文章


共 (1) 个答案

  1. # 1 楼答案

    如果问题与DataSource或EntityManager有关,则会有一条消息通知您这些问题。但你没有。你得到的信息是

    No qualifying bean of type [pl.mmalik.portlet.common.repositories.RecipieRepository] found
    

    这意味着Spring找不到任何Springbean实现这个接口。您是否已将Spring配置为扫描该软件包

    <jpa:repositories
            base-package="pl.mmalik.portlet.common.respository"
    

    不,你没有