今天在做JPa练习时,发现一个错误。很是郁闷,搞了一下午。终于搞定。
 
  
  1. java.lang.IllegalArgumentException: Unknown entity: com.entity.TestEntity  
  2.     at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:671)  
  3.     at com.test.Case.test(Case.java:50)  
  4.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  5.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
  6.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
  7.     at java.lang.reflect.Method.invoke(Method.java:597)  
  8.     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)  
  9.     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)  
  10.     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)  
  11.     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)  
  12.     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)  
  13.     at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)  
  14.     at org.junit.runners.BlockJUnit4Cla***unner.runChild(BlockJUnit4Cla***unner.java:73)  
  15.     at org.junit.runners.BlockJUnit4Cla***unner.runChild(BlockJUnit4Cla***unner.java:46)  
  16.     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)  
  17.     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)  
  18.     at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)  
  19.     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)  
  20.     at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)  
  21.     at org.junit.runners.ParentRunner.run(ParentRunner.java:220)  
  22.     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)  
  23.     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)  
  24.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)  
  25.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)  
  26.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)  
  27.     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)  
  28.  

排出这个错误

      1)看看entity中,不能为空的属性,有没有set();

      2)在META-INF \persistence.xml,有没有声明你的entity

      最后发现自己,在persistence.xml没有加下面这句导致了Jpa Unknown entity:

 
  
  1. <class>com.entity.TestEntity</class> 

这是我的最后测试成功的例子

 

entity

 
  
  1. package com.entity;  
  2.  
  3. import javax.persistence.Column;  
  4. import javax.persistence.Entity;  
  5. import javax.persistence.GeneratedValue;  
  6. import javax.persistence.GenerationType;  
  7. import javax.persistence.Id;  
  8. import javax.persistence.SequenceGenerator;  
  9.  
  10. @Entity  
  11. public class TestEntity {  
  12.     private Integer no1;  
  13.     private String str1;  
  14.  
  15.     public TestEntity() {  
  16.     }  
  17.  
  18.     @Id  
  19.     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "myid")  
  20.     @SequenceGenerator(name = "myid"sequenceName = "myid")  
  21.     @Column(nullable = false)  
  22.     public Integer getNo1() {  
  23.         return no1;  
  24.     }  
  25.  
  26.     public void setNo1(Integer no1) {  
  27.         this.no1 = no1;  
  28.     }  
  29.  
  30.     @Column(nullable = falselength = 12)  
  31.     public String getStr1() {  
  32.         return str1;  
  33.     }  
  34.  
  35.     public void setStr1(String str1) {  
  36.         this.str1 = str1;  
  37.     }  
  38.  
  39. }  

Test
 

 
  
  1. @Test  
  2. public void test() {  
  3.     // TODO: handle exception  
  4.     EntityManagerFactory factory = Persistence 
  5.             .createEntityManagerFactory("JpaTest");  
  6.     EntityManager entityManager = factory.createEntityManager();  
  7.     TestEntity testEntity = new TestEntity();  
  8.     testEntity.setStr1("ningnian");  
  9.     entityManager.getTransaction().begin();  
  10.     entityManager.persist(testEntity);  
  11.     entityManager.getTransaction().commit();  

persistence.xml

 

 
  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
  3.     <persistence-unit name="JpaTest" transaction-type="RESOURCE_LOCAL"> 
  4.     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
  5.     <class>com.entity.TestEntity</class> 
  6.     <exclude-unlisted-classes>true</exclude-unlisted-classes> 
  7.     <properties> 
  8.         <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/> 
  9.         <property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:orcl"/> 
  10.         <property name="hibernate.connection.username" value="ningnian"/> 
  11.         <property name="hibernate.connection.password" value="ningningx"/> 
  12.         <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> 
  13.         <property name="hibernate.show_sql" value="true" /> 
  14.         <property name="hibernate.hbm2ddl.auto" value="update"/>          
  15.     </properties> 
  16.     </persistence-unit> 
  17. </persistence>