【发布时间】:2011-03-27 06:51:49
【问题描述】:
我一直在尝试使用 JPA、MySQL、Hibernate 和 Maven 让一个简单的框架应用程序运行(并提交到数据库),但是我遇到了问题。
下面列出的是我的 2 个微不足道的类,我的 pom.xml 和我的 META-INF/persistence.xml
我可以毫无问题地构建项目(mvn clean install),但是运行它(mvn exec:java -Dexec.mainClass=com.foo.HelloWorld -X)会导致异常,并带有以下 StackTrace。
任何帮助将不胜感激!
堆栈跟踪:
org.apache.maven.lifecycle.LifecycleExecutionException:执行 Java 类时发生异常。空值 在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:719) 在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569) 在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539) 在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387) 在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348) 在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328) 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:362) 在 org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315) 在 org.codehaus.classworlds.Launcher.launch(Launcher.java:255) 在 org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430) 在 org.codehaus.classworlds.Launcher.main(Launcher.java:375) 原因:org.apache.maven.plugin.MojoExecutionException:执行 Java 类时发生异常。空值 在 org.codehaus.mojo.exec.ExecJavaMojo.execute(ExecJavaMojo.java:346) 在 org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490) 在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694) ... 17 更多 引起:java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:291) 在 java.lang.Thread.run(Thread.java:619) 引起:java.lang.NoSuchMethodError: org.hibernate.event.PreInsertEvent.getSource()Lorg/hibernate/engine/SessionImplementor; 在 org.hibernate.validator.event.ValidateEventListener.onPreInsert(ValidateEventListener.java:167) 在 org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:142) 在 org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:65) 在 org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) 在 org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321) 在 org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204) 在 org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130) 在 org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:154) 在 org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:110) 在 org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61) 在 org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:646) 在 org.hibernate.impl.SessionImpl.persist(SessionImpl.java:620) 在 org.hibernate.impl.SessionImpl.persist(SessionImpl.java:624) 在 org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:212) 在 com.foo.HelloWorld.create(HelloWorld.java:32) 在 com.foo.HelloWorld.main(HelloWorld.java:11) ... 6 更多我有以下两个课程: 要存储的实体。
包 com.foo; 导入 java.io.Serializable; 导入 javax.persistence.Basic; 导入 javax.persistence.Entity; 导入 javax.persistence.GeneratedValue; 导入 javax.persistence.Id; @实体 公共类消息{ @ID @GeneratedValue 私人 int id; @基本的 私人字符串消息; 公共消息(){} 公共消息(字符串消息){ this.message = 消息; } 公共字符串 toString() { return "问候语 id=" + id + ", message=" + message; } }应用程序:
包 com.foo; 公共类 HelloWorld { 私有 javax.persistence.EntityManagerFactory 电动势; 私有 javax.persistence.EntityManager em; 私有字符串 PERSISTENCE_UNIT_NAME = "hello-world"; 公共静态无效主要(字符串[]参数){ HelloWorld 你好 = 新的 HelloWorld(); 你好.initEntityManager(); 你好.create(); // hello.read(); 你好.closeEntityManager(); } 私人无效initEntityManager(){ emf = javax.persistence.Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); em = emf.createEntityManager(); } 私人无效closeEntityManager(){ em.close(); emf.close(); } 私人无效创建(){ em.getTransaction().begin(); Message hello = new Message("hello world"); Message bye = new Message("再见,世界"); 消息 [] 消息 = 新消息 [] {你好,再见}; 对于(消息 m:消息){ em.persist(m); } em.getTransaction().commit(); } // 私有无效读取(){ // 消息 m = (Message)em.createQuery("从消息 m 中选择 m").getSingleResult(); // System.out.println("查询返回:" + m); // } }以下是我的 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.treocht.hibernate.tutorial</groupId>
<artifactId>hibernate-tutorial</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>First Hibernate Tutorial</name>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.3.2.GA</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.0.4</version>
</dependency>
<dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>1.8.0.7</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.2.ga</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.2.1.ga</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.2.1.ga</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-tools</artifactId>
<version>3.2.0.beta9a</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.13</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<!--
we dont want the version to be part of the generated war file name
-->
<finalName>${artifactId}</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
我有这个 META-INF/persistence.xml 文件:
【问题讨论】:
标签: java mysql hibernate maven-2 jpa