2016-01-28 36 views
2

我試圖在spring框架中使用hibernate。 以下是我的文件:Spring-Hibernate集成:無法堅持

Employee.java:

package com.springstarter; 

    public class Employee 
    { 
     private int id; 

     private String name; 

     private float salary; 

     public Employee() 
     { 
     } 

     public Employee(int id, String name, float salary) 
     { 
      super(); 
      this.id = id; 
      this.name = name; 
      this.salary = salary; 
     } 

     public int getId() 
     { 
      return id; 
     } 

     public void setId(int id) 
     { 
      this.id = id; 
     } 

     public String getName() 
     { 
      return name; 
     } 

     public void setName(String name) 
     { 
      this.name = name; 
     } 

     public float getSalary() 
     { 
      return salary; 
     } 

     public void setSalary(float salary) 
     { 
      this.salary = salary; 
     } 

    } 

EmployeeDao.java 

    package com.springstarter; 

    import java.util.ArrayList; 
    import java.util.List; 

    import org.springframework.orm.hibernate3.HibernateTemplate; 

    public class EmployeeDao 
    { 
     HibernateTemplate template; 

     public void setTemplate(HibernateTemplate template) 
     { 
      this.template = template; 
     } 

     public void saveEmployee(Employee e) 
     { 
      template.save(e); 
     } 

     public void updateEmployee(Employee e) 
     { 
      template.update(e); 
     } 

     public void deleteEmployee(Employee e) 
     { 
      template.delete(e); 
     } 

     public Employee getById(int id) 
     { 
      Employee e = (Employee) template.get(Employee.class, id); 
      return e; 
     } 

     public List<Employee> getEmployees() 
     { 
      List<Employee> list = new ArrayList<Employee>(); 
      list = template.loadAll(Employee.class); 
      return list; 
     } 
    } 

Driver類:

package com.springstarter; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class SpringORMApp 
{ 
    public static void main(String[] args) 
    { 
     ApplicationContext ctx = new ClassPathXmlApplicationContext("SpringStarter.xml"); 
     EmployeeDao dao = (EmployeeDao) ctx.getBean("edao"); 
     System.out.println(((Employee) dao.getById(1)).getName()); 
    } 
} 

豆類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.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="oracle.jdbc.OracleDriver" /> 
     <property name="url" value="jdbc:oracle:thin:@[10.113.49.82]:1521:roc12c" /> 
     <property name="username" value="milli_sec" /> 
     <property name="password" value="milli_sec" /> 
    </bean> 
    <bean id="mysessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"></property> 
     <property name="mappingResources"> 
      <list> 
       <value>employee.hbm.xml</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</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="edao" class="com.springstarter.EmployeeDao"> 
     <property name="template" ref="template"></property> 
    </bean> 
</beans> 

employee.hbm.xml文件

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 
    <class name="com.springstarter.Employee" table="employee"> 
     <id name="id"> 
      <generator class="assigned"></generator> 
     </id> 
     <property name="name"></property> 
     <property name="salary"></property> 
    </class> 
</hibernate-mapping> 

enter image description here

沒有編譯問題。但預期ID 1 以下的員工對象是日誌。

INFO: HHH000397: Using ASTQueryTranslatorFactory 
Jan 28, 2016 4:28:15 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute 
INFO: HHH000228: Running hbm2ddl schema update 
Jan 28, 2016 4:28:15 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute 
INFO: HHH000102: Fetching database metadata 
Jan 28, 2016 4:28:16 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute 
INFO: HHH000396: Updating schema 
Jan 28, 2016 4:28:46 PM org.hibernate.tool.hbm2ddl.TableMetadata <init> 
INFO: HHH000261: Table found: MILLI_SEC.EMPLOYEE 
Jan 28, 2016 4:28:46 PM org.hibernate.tool.hbm2ddl.TableMetadata <init> 
INFO: HHH000037: Columns: [id, name, salary] 
Jan 28, 2016 4:28:46 PM org.hibernate.tool.hbm2ddl.TableMetadata <init> 
INFO: HHH000108: Foreign keys: [] 
Jan 28, 2016 4:28:46 PM org.hibernate.tool.hbm2ddl.TableMetadata <init> 
INFO: HHH000126: Indexes: [employee_pk] 
Jan 28, 2016 4:28:46 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute 
INFO: HHH000232: Schema update complete 
+0

嘗試改變這個屬性' 「hibernate.hbm2ddl.auto」''從到update''validate'或全部刪除。另外,請確保在應用程序中發現任何異常並正確記錄。 –

+0

請提供完整的日誌 –

回答

1

我認爲,您不使用任何交易的主要問題。爲了用Hibernate讀取數據,你也需要交易。所以你需要用事務管理器來擴展你的SpringStarter.xml配置。您可以使用@Transactional註釋或通過SpringStarter.xml中的方法掩碼將方法添加到方法中。

而且還有在你的代碼中的一些問題

org.springframework.orm.hibernate3.HibernateTemplate

應該

org.springframework.orm.hibernate4.HibernateTemplate

public List<Employee> getEmployees() 
{ 
    List<Employee> list = new ArrayList<Employee>(); 
    list = template.loadAll(Employee.class); 
    return list; 
} 

應該

public List<Employee> getEmployees() 
{ 
    return template.loadAll(Employee.class); 
} 

HibernateTemplate template; 

應該

private HibernateTemplate template;