【问题标题】:spring jpa integration errorspring jpa集成错误
【发布时间】:2013-07-04 12:50:57
【问题描述】:

我对 spring jpa 集成有疑问。我写了一个简单的应用程序并有这样的实体元素

@Entity
@Table(name = "NEWS")
public class News{
    @Id
    @SequenceGenerator(sequenceName = "AUTO_INCREMENT", name = "sequence")
    @GeneratedValue(generator = "sequence", strategy = GenerationType.SEQUENCE)
    @Column(name = "ID", nullable = false, unique = true)
    private int id;
    @Column(name = "NEWSTITLE", nullable = false)
    private String newsTitle;
    @Column(name = "NEWSDATE", nullable = false)
    private Date newsDate;
    @Column(name = "BRIEF", nullable = false)
    private String brief;
    @Column(name = "CONTENT", nullable = false)
    private String content;
    private String date;

这是我的弹簧配置

    <bean id="dataSource"
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${jdbc.driver.manager}" />
            <property name="url" value="${jdbc.url}" />
            <property name="username" value="${jdbc.login}" />
            <property name="password" value="${jdbc.password}" />
        </bean>
   <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="com.epam.newsmanagement.entity"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="database" value="ORACLE" />
            </bean>
        </property>
    </bean>

    <bean id="jpaDao" class="com.epam.newsmanagementserver.dao.JPANewsDao">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

在 tomcat 中部署时出现此错误:

SEVERE: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in Ser
vletContext resource [/WEB-INF/jpa-configuration.xml]: Error setting property values; nested exception is org.springframewor
k.beans.NotWritablePropertyException: Invalid property 'packagesToScan' of bean class [org.springframework.orm.jpa.LocalCont
ainerEntityManagerFactoryBean]: Bean property 'packagesToScan' is not writable or has an invalid setter method. Does the par
ameter type of the setter match the return type of the getter?
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'packagesToScan' of bean class [org.spri
ngframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Bean property 'packagesToScan' is not writable or has an invali
d setter method. Does the parameter type of the setter match the return type of the getter?
        at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:751)
        at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:608)
        at org.springframework.beans.AbstractPropertyAccessor.setPropertyValue(AbstractPropertyAccessor.java:49)
        at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:74)
        at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:57)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowire
CapableBeanFactory.java:970)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapable
BeanFactory.java:729)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBe
anFactory.java:416)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.
java:141)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBean
Factory.java:287)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:348)
        at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebAp
plicationContext.java:156)
        at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1655)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

浏览互联网,我发现要解决这个问题,我们需要使用 Spring 3.1 版及更高版本。但是我使用的是 spring 版本 3.2.3 并得到了这个错误。 请帮忙(

更新

@Avi 发现 Spring ORM 版本 3.2.3 没有方法 setPackagesToScan。所以我将版本更改为 3.2.0,我在这个版本中找到了这样的方法。但启动后我有同样的错误

【问题讨论】:

  • 您确定您的类路径中没有冲突并且您确实使用了大于 3.0 的 spring-orm 版本吗?
  • @mabbas,我使用 maven,在 pom.xml 中我指定 spring-orm 版本 3.2.3.RELEASE。当我将我的 web 应用程序打包到 war 文件中时,我查看了它的 lib 文件夹,并没有找到任何可能相互冲突的库

标签: java spring tomcat jpa


【解决方案1】:

您似乎正在尝试设置一个不存在的属性。 LocalContainerEntityManagerFactoryBean 类没有名为 setPackagesToScan 的设置器,但您尝试设置此类属性。

【讨论】:

  • 但是当我使用 3.2.0 版本时,这个方法是。所以可能知道我如何指定 jpa 现在必须搜索我的注释实体类的包?
【解决方案2】:

检查你的依赖关系。

Documentation setPackagesToScan:

注意:仅在未指定外部 PersistenceUnitManager 时应用。

依赖示例:

        <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${org.hibernate-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>${spring-data-jpa-version}</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql-version}</version>
    </dependency>

【讨论】:

    【解决方案3】:

    确保您的 web.xml 看起来像这样。

    <web-app>
    <display-name>Archetype Created Web Application</display-name>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
        classpath:/beans.xml,       
        </param-value>
    </context-param>
    
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    

    Filter 和 FilterMapping 标记已从此示例中删除。确保你有它们..

    希望对你有帮助。

    【讨论】:

      【解决方案4】:

      如果你寻找org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean api

      没有像 packageForScan 这样的属性这就是为什么它给出错误你可以在你的 spring.xml 中使用组件扫描来给你的包包含实体

      容器会自动扫描实体比

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-21
        • 1970-01-01
        • 2014-07-02
        • 2012-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        相关资源
        最近更新 更多