休眠未知实体:

问题描述:

我设计了一个示例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

更改表名客户。我认为它会解决这个问题。 在Unix上,表名是区分大小写的。在Windows上,他们不是。

+0

我更改了表名(客户,客户,客户),但问题无法解决。它仍然是未知的实体。 java.lang.IllegalArgumentException:未知实体:entities.Customer – DRF

未知实体的名称是学生。你在这里复制了错误的异常还是名称错误?

+0

问题来自CustomerDAO中的session.persist(customer)。我怎样才能解决它? – DRF

+0

我已经检查过你的代码了。这对我来说似乎没有问题。通常这是由缺少的实体映射引起的问题,但我可以看到它在您的休眠设置文件中。既然你已经设置了hbm2ddl.auto来更新,即使表丢失了,它仍然不会引起任何问题。我只会建议你检查配置是否正确加载或者实体的包名是否正确。 – Simon