今天在学习JPA时,做一个用例,出现下面错误,有时候在Hibernate里也会出现,请各位路过大侠看下:java.lang.NoSuchFieldError: INSTANCE
at org.hibernate.type.BasicTypeRegistry.<init>(BasicTypeRegistry.java:94)
at org.hibernate.type.TypeResolver.<init>(TypeResolver.java:59)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:250)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:302)
at org.hibernate.cfg.AnnotationConfiguration.<init>(AnnotationConfiguration.java:96)
at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:133)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
at kun.model.PersonCURDTest.testAdd(PersonCURDTest.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

解决方案 »

  1.   

    此处是源代码:persistence.xml:<?xml version="1.0" encoding="UTF-8"?>
    <persistence 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_2_0.xsd"
                 version="2.0">
    <!-- 持久化单元 -->
        <persistence-unit name="JPAPersistence" transaction-type="RESOURCE_LOCAL">
            <properties>
                <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
                <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
                <property name="hibernate.connection.url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
                <property name="hibernate.connection.username" value="junit"/>
                <property name="hibernate.connection.password" value="junit"/>            <property name="hibernate.hbm2ddl.auto" value="update"/>
                <property name="hibernate.show_sql" value="true"/>
                <property name="hibernate.format_sql" value="true"/>      
         
                
            </properties>
        </persistence-unit>
    </persistence>Person.java:
    package kun.model;import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;@Entity
    public class Person { private int id;
    private String name; @Id
    @GeneratedValue
    // (strategy=GenerationType.AUTO)
    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;
    }}
    JunitCase:
    package kun.model;import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;import org.junit.Test;public class PersonCURDTest { @Test
    public void testAdd() {

    //EntityManagerFactory 类似于Hibernate SessionFactory
    //"JPAPersistence" 持久化单元名称
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAPersistence");
    EntityManager em = emf.createEntityManager();

    Person p = new Person();
    p.setName("link");

    em.getTransaction().begin(); //开启事务
    em.persist(p);
    em.getTransaction().commit(); //提交事务
    em.close();
    emf.close();
    }}请各位大侠看下,小弟不胜感激!!!
      

  2.   

    数据库里生成Person这张表没?
      

  3.   

    没有,我做测试,在:
    JunitCase:EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAPersistence");
    这一句时,就出错了,后面都没有机会执行
      

  4.   

    用的数据库是Oracle 11g,而且以前在做Hibernate时,用Mysql5也出过类似问题,只是后来忘了怎么解决的了。
      

  5.   

    java.lang.NoSuchFieldError: INSTANCE
    个人认为少点啥,如果代码没错,就是表有问题
      

  6.   

    我看你的表并没有写注入生成表。在@Entity下加@Table(name="person") 然后就是仔细检查,你的配置是不是对的。
      

  7.   

    我就是要用实体Bean生成表,那个@Table注解本来就可以不用写的,生成表名与Entity名称相同,检查过配置,没有问题。纠结啊~~~~
      

  8.   

    I solved my problem.
    I had to delete hibernate-annotations.jar, because I had it already in hibernate3.jar...
      

  9.   

    刚刚又检查过配置,应该是没错,直接用JDBC也作过测试,还是不行???
      

  10.   

    多谢各位解答,我刚刚把jar包换成hibernate4.0的后,程序不再出错,下面是我使用到的jar包,是Hibernate 4.0.1 Final,之前用的是3.6.9,只是到现在还不知道问题出在哪~~~~如果各位有兴趣,可以去试下Hibernate3.6.9为什么不行???
      

  11.   

    Hibernate3.6 和 hibernate-jpa-2.0 包冲突。