求助大虾们,小弟学习hibernate时有点点困惑~~~帮帮忙吧

BernardXiong 发布于 2011/04/19 19:23
阅读 441
收藏 2

   我在实验hibernate“一对一单项外键关联”时,建好两个类,并且想在测试类里用SchemaExport在数据库里生成表,我用的MySQL数据库。。。用junit测试每次都报错。。。具体错误是这样的:

java.lang.NoSuchMethodError: javax.persistence.OneToOne.orphanRemoval()Z
 at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1641)
 at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)
 at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
 at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4008)
 at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3962)
 at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1371)
 at org.hibernate.cfg.Configuration.generateDropSchemaScript(Configuration.java:975)
 at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:130)
 at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:92)
 at org.util.TestH.testSchemaExport(TestH.java:22)
 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.runChild(BlockJUnit4ClassRunner.java:76)
 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
 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:46)
 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)

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

对于这个错误,我网上搜了,有人说是ejb3-persistence.jar和hibernate-jpa-2.0-api-1.0.0.Final.jar包冲突,说要删去ejb3就行了。但是ejb3这个包是Annotation注解需要的类库,况且我也试了删除了还是报同样的错。

下面列出下我项目的架包(hibernate3.6.2):

antlr-2.7.6.jar

commons-collections-3.1.jar

dom4j-1.6.1.jar

hibernate3.jar

javassist-3.12.0.GA.jar

jta-1.1.jar

slf4j-api-1.6.1.jar

hibernate-jpa-2.0-api-1.0.0.Final.jar

--------下面是annotation的架包(hibernate-annotations-3.4.0.GA里面的)

ejb3-persistence.jar

hibernate-annotations.jar

hibernate-commons-annotations.jar

--------下面是Junit的

junit-4.7.jar

--------还有log4j的

log4j-1.2.15.jar

slf4j-log4j12-1.6.1.jar

--------MySQL的

mysql-connector-java.jar

-----------------------------------------我的两个类是这样的

@Entity

public class Husband {
        private int id;
        private String name;
        private Wife wife;
 
@Id
@GeneratedValue
 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;
                                               }
@OneToOne
@JoinColumn(name="wifeId")
 public Wife getWife() {
       return wife;
                              }
 public void setWife(Wife wife) {
       this.wife = wife;
                                          } 
                                  }

------------另一个类是

@Entity
public class Wife {
          private int id;
          private String name;
 
@Id
@GeneratedValue
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;
                                               }

                          }

---------------------------测试类的主要代码是

@Test
 public void testSchemaExport(){
             new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
                                           }

 

------------------------------------------各位大虾们,我是个学童,正在学习hibernate遇到这个问题,比较焦急。。帮下小弟我吧。。我不知道错误原因到底在哪了。。版本貌似都是对了。但是就是要报那个错误。。。谢谢大家了

加载中
0
DanielTo
DanielTo

我昨天也遇到和你一样的问题,也做了很多实验,最终发现这是hibernate3.5的一个bug。

你是用的web project吧!我刚开始也用的是web project,出现同样的问题。后来找我的同学(是个高手哦!)
进 行调试,他新建了一个java project做的实验(配置环境和我的web project一致),通过了。后来在我的项目上调试,还是不行,最后没办法我就怀疑是工程的不同造成的,发现是由于web project里带了j2ee1.5 Libraries与hibernate3.5里jar包产生了冲突而造成的错误。解决方案是:将web project的j2ee1.5 Libraries换成j2ee1.4 Libraries

希望能对你及遇到这个问题的同学们有帮助

http://topic.csdn.net/u/20100529/22/6fa08136-1de5-45c8-9d62-488e634dca57.html

0
BernardXiong
BernardXiong

引用来自#2楼“AJ”的帖子

我昨天也遇到和你一样的问题,也做了很多实验,最终发现这是hibernate3.5的一个bug。

你是用的web project吧!我刚开始也用的是web project,出现同样的问题。后来找我的同学(是个高手哦!)
进 行调试,他新建了一个java project做的实验(配置环境和我的web project一致),通过了。后来在我的项目上调试,还是不行,最后没办法我就怀疑是工程的不同造成的,发现是由于web project里带了j2ee1.5 Libraries与hibernate3.5里jar包产生了冲突而造成的错误。解决方案是:将web project的j2ee1.5 Libraries换成j2ee1.4 Libraries

希望能对你及遇到这个问题的同学们有帮助

http://topic.csdn.net/u/20100529/22/6fa08136-1de5-45c8-9d62-488e634dca57.html

 好,谢谢哦。。。我去试试。。我一直也觉得有问题肯定在类库之间。。。就是不知道具体是因为什么。。我现在去试试

返回顶部
顶部