2010-01-12 71 views
0

我尝试实例化Hibernate并连接MySQL数据库时遇到问题(请参阅下面的错误消息)。Hibernate在EntityTuplizerFactory.constructTuplizer中失败并返回NullPointerException?为什么?

奇怪的是连接工作正常运行JUnit测试时使用完全相同的hibernate.cfg.xml文件,但它拒绝从Tomcat运行时工作...

我开始江郎才尽。

任何线索或提示在哪里看?

所致:org.hibernate.HibernateException:无法实例默认的tuplizer [org.hibernate.tuple.entity.DynamicMapEntityTuplizer] 在org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:110 ) 在org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:135) 在org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping。(EntityEntityModeToTuplizerMapping.java:69) 在org.hibernate.tuple.entity。 EntityMetamodel(EntityMetamodel.java:323) 在org.hibernate.persister.entity.AbstractEntityPersister。(AbstractEntityPersister.java:456) (org.hibernate.persister.entity.SingleTableEntityPersister。(SingleTableEntityPersister.java:131) at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84) at org.hibernate.impl.SessionFactoryImpl。(SessionFactoryImpl.java :267) 在org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341) 在se.fmt.atlantism.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:16) ... 38更 引起:显示java.lang.NullPointerException 在org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:107) ...... 47多个

回答

2

我在写这为今后的Google和参考。

我已经做了一些调查研究,问题的根源仍然不得而知。但是下面的文章让我走上了正轨。

http://www.howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu/

好像在Ubuntu(和Debian)可用的软件包无法正常工作Tomcat的(至少6版)。相反,我使用以下指南Tomcat安装:

http://www.ctrip.ufl.edu/tomcat6-debian-lenny-howto

虽然这未必是超值之选安装似乎有必要得到Tomcat的版本6的运行,而不在Ubuntu和/或Debian的莱尼问题。

+0

两个指南都使用Tomcat的startup.sh和shutdown.sh脚本来控制Tomcat实例。这对于开发很好,但在生产中,您应该使用jsvc以专用的低特权帐户运行Tomcat。 您需要在$ CATALINA_HOME/bin/jsvc-src.tar.gz中创建jsvc - 与Tomcat一起发布的源代码。 此存档文件中的Tomcat5.sh提供了一个合适的安装脚本 - 它需要针对您的jvm/environment进行调整。 Apache的更多细节:http://tomcat.apache.org/tomcat-6.0-doc/setup.html 这只适用于* nix安装 - Windows安装程序神奇地创建一个jsvc服务。 – 2010-04-18 19:07:12

0

这是Tomcat的守护进程的样子:

 
root  2605 0.0 0.0 16584 376 ?  Ss 15:39 0:00 
    /usr/bin/jsvc -user tomcat6 
-cp /usr/share/java/commons-daemon.jar:/usr/share/tomcat6/bin/bootstrap.jar 
-outfile SYSLOG -errfile SYSLOG -pidfile /var/run/tomcat6.pid 
-Djava.awt.headless=true -Xmx128M 
-Djava.endorsed.dirs=/usr/share/tomcat6/endorsed 
-Dcatalina.base=/var/lib/tomcat6 -Dcatalina.home=/usr/share/tomcat6 
-Djava.io.tmpdir=/tmp/tomcat6-temp -Djava.security.manager 
-Djava.security.policy=/var/lib/tomcat6/work/catalina.policy 
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
-Djava.util.logging.config.file=/var/lib/tomcat6/conf/logging.properties 
org.apache.catalina.startup.Bootstrap 

这是使用Sysdeo的Tomcat的启动器插件在Eclipse从运行时Tomcat进程的外观:
(这一项实际工作)

 
jzaruba 2655 19.7 4.5 358304 46152 ?  Sl 15:43 0:01 
/usr/lib/jvm/java-6-sun-1.6.0.15/bin/java 
-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:37377 
-Dcatalina.home=/usr/share/tomcat6 
-Djava.endorsed.dirs=/usr/share/tomcat6/endorsed 
-Dcatalina.base=/var/lib/tomcat6 -Djava.io.tmpdir=/var/lib/tomcat6/temp 
-Dfile.encoding=UTF-8 -classpath 
/usr/share/tomcat6/bin/bootstrap.jar:/usr/lib/jvm/java-6-sun-1.6.0.15/lib/tools.jar 
org.apache.catalina.startup.Bootstrap start 

工作一个(Eclipse的推出)是用java-6-太阳1.6.0.15,我是Windows用户,所以我不知道如何判断哪些JRE用于/ usr/lib中/的jsvc(查看运行它虽然),但我的猜测是它是一些OpenJDK的......这可能是差异?

更新:可能的jsvc使用相同的JRE Sysdeo的Tomcat的启动确实

+0

我正在使用java-6-sun-1.6.0.15 jdk,所以我怀疑Java的版本是否会受到指责。 – 2010-01-21 08:18:08

1

在我的情况下,通过在我的pom.xml中切换<依赖项/ >顺序来解决此错误。当hibernate(3.2.7.ga)出现在hibernate-annotations(3.4.0.GA)之前时,会发生此错误。相反,它工作正常。甚至在scope = compile的情况下也是如此。

我猜你需要调整你的类路径,除了(假设你已经在WEB-INF/lib中删除了两个jar),它应该按照正确的顺序进行alpha排序。但是,也许这会给某人提示如何前进。

+0

听起来很有趣。一旦我有一些时间花在这个问题上,我会再看看它。 – 2010-03-29 10:33:12

1

在我的情况下,这是一个简单的错误 - 配置文件* .hbm.xml有一个映射对象没有的属性!我还听说当你拼错get/set函数时出现这种错误的情况 - 与我的情况非常相似。

+0

感谢您的输入。我不认为这是* .hbm.xml文件出于几个不同原因的问题;但我想这个问题有很多根源和原因。 – 2010-03-31 10:50:50

相关问题