【问题标题】:File not found Exception in Spring annotation integration with hibernate在与休眠的 Spring 注释集成中找不到文件异常
【发布时间】:2017-10-13 21:21:57
【问题描述】:

我正在使用与 Spring 注释集成的休眠并为我的实体类获取 FileNotFoundException

这是我的 applicationContext.xml

<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/db1"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>

    <bean id="mysessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="mappingResources">
            <list>
                <value>vendors.Vendor</value>
                <value>accountBooks.DayBookData</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.show_sql">true</prop>

            </props>
        </property>
    </bean>

    <bean id="template" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory" ref="mysessionFactory"></property>
    </bean>

    <bean id="vendor" class="vendors.VendorDao">
        <property name="hibernateTemplate" ref="template"></property>
    </bean>

    <bean id="dayBook" class="accountBooks.DayBookDao">
        <property name="hibernateTemplate" ref="template"></property>
    </bean>

</beans>  

我的道课

public class DayBookDao {

    private HibernateTemplate hibernateTemplate;

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
        this.hibernateTemplate = hibernateTemplate;
    }

    public void saveDayBookData(DayBookData dayBook){
        hibernateTemplate.save(dayBook);
    }

    public void updateDayBookData(DayBookData dayBook){
        hibernateTemplate.update(dayBook);
    }

    public void deleteDayBookData(DayBookData dayBook){
        hibernateTemplate.delete(dayBook);
    }

    public List<DayBookData> getDayBookData(){
        List<DayBookData> dayBook = hibernateTemplate.loadAll(DayBookData.class);
        return dayBook;
    }
}

我的主要课程

public static void main(String[] args) {
        // TODO Auto-generated method stub

        Resource r = new ClassPathResource("applicationContext.xml");
        BeanFactory bean = new XmlBeanFactory(r);

        DayBookDao dayBookDao = (DayBookDao) bean.getBean("dayBook");
        DayBookData dayBook =  new DayBookData();
        dayBook.setAccountType("Bank Account");
        dayBook.setTransType("Receipt");
        dayBook.setOppAccount("Profit-Loss");
        dayBook.setAmount(15000);
        dayBook.setTransDate(new Date());
        dayBookDao.saveDayBookData(dayBook);
    }

我遇到了错误

**原因:java.io.FileNotFoundException:类路径资源[vendors.Vendor]无法打开,因为它不存在

【问题讨论】:

标签: java xml spring hibernate


【解决方案1】:

属性 mappingResources 用于 XML (hbm.xml) 映射。

冬眠 4 及以上

您只需将所有持久类放入some.package.model 包并使用

<property name="packagesToScan" value="some.package.model" />

添加该包中的所有类。内包装也被处理。

您也可以使用单独添加持久类

<property name="annotatedClasses">
     <list>
       <value>vendors.Vendor</value>
       <value>accountBooks.DayBookData</value>
     </list>
 </property>

休眠 3

Hibearnate 3 配置使用带注释的持久类和 Spring 稍微复杂一些。 需要将持久化类添加到hibernate.cfg.xml,并通过这种方式配置Spring:

<bean id="mysessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation">
    <value>classpath:hibernate.cfg.xml</value>
  </property>

  <property name="configurationClass">
    <value>org.hibernate.cfg.AnnotationConfiguration</value>
  </property>
</bean>

Hibernate 3 为带有注释的配置使用单独的配置类:

org.hibernate.cfg.AnnotationConfiguration

【讨论】:

  • 抛出 org.springframework.beans.NotWritablePropertyException:bean 类 [org.springframework.orm.hibernate3.LocalSessionFactoryBean] 的无效属性“packagesToScan”
  • @PoojaDave 我认为您使用的是旧的Spring 版本,没有此属性。您可以使用annotatedClasses 逐一添加课程。 stackoverflow.com/a/19746386/3405171
  • 我使用的是 Spring 3.2,对于 annotatedClasses 也遇到了同样的异常。
  • 我尝试使用 Spring 4.3.8,现在我得到 java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
  • @PoojaDave 你只需要使用正确的罐子。我更新了 Hibernate 3 的答案。
猜你喜欢
  • 2013-01-12
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
相关资源
最近更新 更多