自己最近因为公司项目的需要,有重拾SSH 此次是以注解的形式进行开发的 因此整合后发现一些问题 特此在这里记录下来 方便日后查阅
SSH注解整合 异常 java.lang.NoSuchFieldError: INSTANCE
Caused by: 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:108)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
... 42 more
困扰了好久的问题终于解决了,出现这种情况一般是有重复的jar包在里面。所以才导致了这个异常
具体的包 : hibernate-annotations.jar 多了这个jar包 因为在hibernate3.jar 中已经存在了 所以直接将他删掉即可
Caused by: java.lang.ClassCastException: org.hibernate.annotations.common.reflection.java.JavaReflectionManager cannot be cast to org.hibernate.annotations.common.reflection.MetadataProviderInjector
at org.hibernate.cfg.Configuration.createReflectionManager(Configuration.java:2989)
at org.hibernate.cfg.Configuration.createReflectionManager(Configuration.java:2984)
at org.hibernate.cfg.Configuration.reset(Configuration.java:307)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:298)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:302)
at org.hibernate.cfg.AnnotationConfiguration.<init>(AnnotationConfiguration.java:75)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
... 42 more
错误原因 使用了 hibernate-commons-annotations.jar 将其删掉即可
You have to use hibernate-commons-annotations version 3.2.0.Final, because 3.3.0.ga is an invalid version as stated in the README.TXT in the maven repository folder:
"Version '3.3.0.ga' was a mistake during the release process, please disregard.
There is not such version 3.3.0.ga."
Version 3.2.0.Final includes the missing MetadataProvider
解释 解释链接地址
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [com/zhin/ycb/spring/application-spring.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sessionFactory' is required
原因就是transactionManager要注入 sessionFactory 即可
Caused by: 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:108)
at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:107)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:130)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:288)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479)
... 36 more
原因是jar包冲突了 需要将不必要的jar包删掉 冲突的jar hibernate-annotations.jar和hibernate-commons-annotations.jar 因为我用的是hibernate3.6版本的所以呢 在hibernate3.jar中已经包含了这两个jar 因此只要将它们删除即可
大家都知道框架的异常都是从最底下开始看起,
异常信息:Caused by:org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: cn.com.agricom.entity.SysPhotograph.sysBeforemovevillage in cn.com.agricom.entity.SysBeforemovevillage.sysPhotographs
上面是错误的关键部分
错误原因:在one-to-many注解配置: @OneToMany (mappedBy = "sysBeforemovevillage"),mappedBy指向的是要关联的属性,而不是要关联的类,
如果这样配置,hibernate则会找cn.com.agricom.entity.SysPhotograph类下面的sysBeforemovevillage属性。但实际上没有这个属性,就会报上面的异常
方法:指定到实际关联的属性:即:@OneToMany (mappedBy = "sysBeforemovevillage") 这个异常时因为我只想做单向的关联所以才造成的,我删除了Many的一方注解 而忘记了删除One一方的外键属性所以造成这个异常