2014-03-13 16 views
1

運行時嘗試我的手在我的第一個休眠(JPA註解)控制檯應用程序。我一直在試圖解決依賴關係的圈子裏跑來跑去,感覺就像我試圖在颶風中建造一幢房子。另外,我使用maven,我的印象是,這Maven是應該防止這種類型的事情..下反正這是我得到的錯誤:java.lang.NoSuchFieldError的:名字在Hibernate項目

Exception in thread "main" java.lang.NoSuchFieldError: name 
    at org.slf4j.impl.Log4jLoggerAdapter.<init>(Log4jLoggerAdapter.java:75) 
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:75) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103) 
    at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:197) 
    at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:107) 
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:124) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) 
    at com.deangrobler.hibernatetest.App.main(App.java:14) 

這是我的POM文件:

<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.deangrobler</groupId> 
    <artifactId>HibernateTest</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>HibernateTest</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>3.4.0.GA</version> 
     <exclusions> 
     <exclusion> 
      <artifactId>ejb3-persistence</artifactId> 
      <groupId>org.hibernate</groupId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>3.6.10.Final</version> 
     <exclusions> 
     <exclusion> 
      <artifactId>antlr</artifactId> 
      <groupId>antlr</groupId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>3.6.10.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>3.2.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.0-api</artifactId> 
     <version>1.0.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.transaction</groupId> 
     <artifactId>jta</artifactId> 
     <version>1.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-jpamodelgen</artifactId> 
     <version>1.1.1.Final</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.5.5</version> 
    </dependency> 
    </dependencies> 
</project> 

我的註解bean類:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package com.deangrobler.hibernatetest; 

import java.io.Serializable; 
import javax.persistence.Basic; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.Table; 
import javax.xml.bind.annotation.XmlRootElement; 

/** 
* 
* @author Dean Grobler 
*/ 
@Entity 
@Table(name = "user") 
@XmlRootElement 
@NamedQueries({ 
    @NamedQuery(name = "User.findAll", query = "SELECT u FROM User u"), 
    @NamedQuery(name = "User.findById", query = "SELECT u FROM User u WHERE u.id = :id"), 
    @NamedQuery(name = "User.findByName", query = "SELECT u FROM User u WHERE u.name = :name")}) 
public class User implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "id") 
    private Integer id; 
    @Column(name = "name") 
    private String name; 

    public User() { 
    } 

    public User(Integer id) { 
     this.id = id; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (id != null ? id.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof User)) { 
      return false; 
     } 
     User other = (User) object; 
     if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "com.deangrobler.hibernatetest.User[ id=" + id + " ]"; 
    } 

} 

如果我能得到這方面的一些幫助,我將感激不盡!

+0

請顯示帶註釋的bean。 – Mauren

+0

你可以顯示你的App.java內容嗎? –

+0

顯示你的豆類 – BDR

回答

0

似乎是在依賴關係神器SLF4J-log4j12版本衝突。

您可以檢查「mvn dependency:tree」的輸出以檢查衝突。

+0

嗨史蒂文,你如何在Netbeans輸出這個? – Tiwaz89

+1

我不使用Netbeans。 Eclipse具有包含相同信息的pom.xml的「Dependency Hierarchy」視圖。我會認爲Netbeans有類似的東西。 –

+0

這可能是有幫助的:http://wiki.netbeans.org/NetBeans_72_NewAndNoteworthy#Dependency_display –

1

嘗試刪除您的pom中的slfj依賴項,強制hibernate依賴項將其排除。 Hibernate想要使用它自己的。

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-annotations</artifactId> 
    <version>3.6.10.FINAL</version> 
    <exclusions> 
     <exclusion> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
     </exclusion> 
    </exclusions> 
    <scope>compile</scope> 
</dependency> 

等添加相同排除了對Hibernate核等

2

您有休眠實體管理的兩個不同版本的依賴。這不起作用。刪除其中之一

<dependency> 
     <groupId>hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>3.4.0.GA</version> 
     <exclusions> 
     <exclusion> 
      <artifactId>ejb3-persistence</artifactId> 
      <groupId>org.hibernate</groupId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
........................ 

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>3.6.10.Final</version> 
    </dependency> 
+0

啊!我沒有看到,你會說我刪除了哪一個? – Tiwaz89

+1

通常你會想要兩個最新的,即3.6.10.Final – Shailendra

相關問題