2017-03-02 152 views
0

我設計了一個示例crud操作,但我遇到了一個與持久化對象到數據庫有關的問題,這意味着C(創建)。儘管我在實體中定義了註釋,但我無法解決它。我如何解決它?謝謝。休眠未知實體:

以下是以下代碼。

Customer.java

package entities; 

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.SequenceGenerator; 
import javax.persistence.Table; 

@Entity 
@Table(name="CUSTOMER",schema="CRUD") 
public class Customer implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    @Id 
    @SequenceGenerator(name="musseq",sequenceName="musSEQ",allocationSize=1) 
    @GeneratedValue(generator="musseq",strategy=GenerationType.SEQUENCE) 
    @Column(name="ID") 
    private Integer id; 

    @Column(name="NAME") 
    private String name; 

    @Column(name="SURNAME") 
    private String surname; 

    @Column(name="DEPARTMENT") 
    private String department; 

    public Customer() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public Customer(String name, String surname, String department) { 
     super(); 
     this.name = name; 
     this.surname = surname; 
     this.department = department; 
    } 

    public Integer getId() { 
     return id; 
    } 

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

    public String getName() { 
     return name; 
    } 

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

    public String getSurname() { 
     return surname; 
    } 

    public void setSurname(String surname) { 
     this.surname = surname; 
    } 

    public String getDepartment() { 
     return department; 
    } 

    public void setDepartment(String department) { 
     this.department = department; 
    } 


} 

CustomerDAO.java

package daos; 

import java.util.List; 

import org.hibernate.Session; 
import org.hibernate.Transaction; 

import entities.Customer; 
import util.HibernateUtil; 

public class CustomerDAO implements ICustomerDAO { 

    @Override 
    public void addCustomer(Customer customer) { 
     // TODO Auto-generated method stub 

     Session session = HibernateUtil.getSessionFactory().openSession(); 
     Transaction trx = session.getTransaction(); 

     try { 

      trx.begin(); 

      session.persist(customer); 

      trx.commit(); 

     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
      if (trx != null) 
       trx.rollback(); 
     } finally { 
      session.close(); 
     } 

    } 

    @Override 
    public List<Customer> getAllCustomer() { 
     // TODO Auto-generated method stub 
     Session session = HibernateUtil.getSessionFactory().openSession(); 
     Transaction trx = session.getTransaction(); 
     try { 

      trx.begin(); 

      List<Customer> liste = session.createQuery("from Customer").list(); 

      trx.commit(); 

      return liste; 

     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
      if (trx != null) 
       trx.rollback(); 
     } finally { 

      session.close(); 

     } 
     return null; 
    } 

    @Override 
    public void deleteCustomer(int customerId) { 
     // TODO Auto-generated method stub 
     Session session = HibernateUtil.getSessionFactory().openSession(); 
     Transaction trx = session.getTransaction(); 

     Customer customerObj= null; 

     try { 

      trx.begin(); 

      customerObj = session.load(Customer.class, customerId); 
      session.delete(customerObj); 

      trx.commit(); 

     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
      if (trx != null) 
       trx.rollback(); 
     } finally { 
      session.close(); 
     } 

    } 

} 

的hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
             "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory name="CRUD"> 
    <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
    <property name="hibernate.connection.password">123</property> 
    <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property> 
    <property name="hibernate.connection.username">CRUD</property> 
    <property name="hibernate.default_schema">CRUD</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> 
    <property name="hibernate.connection.pool_size">2</property> 
    <property name="hibernate.hbm2ddl.auto">update</property> 
    <mapping class="entities.Customer"/> 
</session-factory> 
</hibernate-configuration> 

HibernateUtil.java

package util; 

import org.hibernate.SessionFactory; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.cfg.Configuration; 

public class HibernateUtil { 
    private static final SessionFactory sessionFactory = buildSessionFactory(); 

    private static SessionFactory buildSessionFactory() { 
     try { 
      // Create the SessionFactory from hibernate.cfg.xml 
      Configuration configuration = new Configuration().configure("hibernate.cfg.xml"); 
      return configuration.buildSessionFactory(
        new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build()); 
     } catch (Throwable ex) { 
      // Make sure you log the exception, as it might be swallowed 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 
} 

錯誤

java.lang.IllegalArgumentException: Unknown entity: entities.Customer 
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:766) 
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:742) 
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:747) 
at daos.CustomerDAO.addCustomer(CustomerDAO.java:24) 
at servlets.CustomerServlet.doGet(CustomerServlet.java:38) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Unknown Source) 
+0

向我們展示HibernateUtil。另外,爲什麼在XML中sessionFactory的名稱? – Shadov

+0

實體在哪裏?學生從哪裏來? – Bewusstsein

+0

是否在應用程序的某個地方指定了''? – alexandrum

回答

0

更改表名客戶。我認爲它會解決這個問題。 在Unix上,表名是區分大小寫的。在Windows上,他們不是。

+0

我更改了表名(客戶,客戶,客戶),但問題無法解決。它仍然是未知的實體。 java.lang.IllegalArgumentException:未知實體:entities.Customer – DRF

0

未知實體的名稱是學生。你在這裏複製了錯誤的異常還是名稱錯誤?

+0

問題來自CustomerDAO中的session.persist(customer)。我怎樣才能解決它? – DRF

+0

我已經檢查過你的代碼了。這對我來說似乎沒有問題。通常這是由缺少的實體映射引起的問題,但我可以看到它在您的休眠設置文件中。既然你已經設置了hbm2ddl.auto來更新,即使表丟失了,它仍然不會引起任何問題。我只會建議你檢查配置是否正確加載或者實體的包名是否正確。 – Simon