2015-06-24 131 views
2

我嘗試在spring-orm和hibernate中使用jpa。找不到persistence.xml

我有TRADES表mysql數據庫。我嘗試使用jpa與這張表一起工作。 我嘗試使用persistence.xml測試EntityManager創建,但我得到一個異常,「沒有持久性提供者的EntityManager名爲[persistence-unit-name from persistence.xml]」 當我看到另一個這樣的問題時,這意味着我的情況找不到persistence.xml文件。

當我嘗試測試這個配置時,我得到一個異常,persistence.xml找不到,就像我想的那樣。

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named trade-mysql-pu 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32) 
    at com.madhusudhan.jsd.jpa.EntityManagerTest.init(EntityManagerTest.java:16) 
    at com.madhusudhan.jsd.jpa.EntityManagerTest.main(EntityManagerTest.java:29) 

我不明白爲什麼會發生這種情況。你可以幫幫我嗎? 謝謝。

表:

此表
create table TRADES (ID int NOT NULL, 
    ACCOUNT VARCHAR(20) NOT NULL, 
    SECURITY VARCHAR(10) NOT NULL, 
    QUANTITY INT NOT NULL, 
    STATUS VARCHAR(10), 
    DIRECTION VARCHAR(10) 
); 

實體類:

package com.madhusudhan.jsd.domain.jpa; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="trades") 
public class Trade { 

    private int id; 
    private String direction; 
    private String account; 
    private String security; 
    private String status; 
    private int quantity; 

    @Column(nullable=false) 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 

    @Column 
    public String getDirection() { 
     return direction; 
    } 
    public void setDirection(String direction) { 
     this.direction = direction; 
    } 

    @Column 
    public String getAccount() { 
     return account; 
    } 
    public void setAccount(String account) { 
     this.account = account; 
    } 

    @Column 
    public String getSecurity() { 
     return security; 
    } 
    public void setSecurity(String security) { 
     this.security = security; 
    } 

    @Column 
    public String getStatus() { 
     return status; 
    } 
    public void setStatus(String status) { 
     this.status = status; 
    } 

    @Column 
    public int getQuantity() { 
     return quantity; 
    } 
    public void setQuantity(int quantity) { 
     this.quantity = quantity; 
    } 

    @Override 
    public String toString() { 
     return "Trade [id=" + id + ", direction=" + direction + ", account=" 
       + account + ", security=" + security + ", status=" + status 
       + "]"; 
    } 

} 

而且在persistence.xml中的src /主/資源/ META-INF

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0"> 

    <persistence-unit name="trade-mysql-pu" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter</provider> 
     <class>com.madhusudhan.jsd.domain.jpa.Trade</class> 
     <properties> 
      <property name="hibernate.hbm2ddl.auto" value="validate" /> 
      <property name="show_sql" value="true" /> 
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/JSDATA"/> 
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
      <property name="hibernate.connection.username" value="prospring4"/> 
      <property name="hibernate.connection.password" value="prospring4"/> 
      <property name="hibernate.connection.pool_size" value="1"/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

這是測試等級:

從的build.gradle個

依賴關係:

dependencies { 
    compile 'org.springframework:spring-context:4.1.6.RELEASE' 
    compile 'org.springframework:spring-jdbc:4.1.6.RELEASE' 
    compile 'org.springframework:spring-orm:4.1.6.RELEASE' 
    compile 'commons-dbcp:commons-dbcp:1.4' 
    compile 'mysql:mysql-connector-java:5.1.18' 
    compile 'org.hibernate:hibernate-core:3.6.0.Final' 
    compile 'org.hibernate:hibernate-entitymanager:3.6.0.Final' 
    compile 'junit:junit:4.7' 
    compile 'log4j:log4j:1.2.14' 
} 
+0

什麼是您構建的佈局? persistence.xml在哪裏? –

+0

@LeosLiterak persistence.xml位於src/main/resources/META-INF中,src/main/resources /在構建路徑中沒有任何排斥 – wazz

回答

1

一些事情你可以試試:

  1. 檢查你的src /主/資源文件夾在類路徑中。在Eclipse中,它意味着右鍵單擊項目>屬性> Java Build Path,並確保在Source選項卡下指定了src/main/resources。如果不存在,請單擊添加文件夾以添加資源文件夾。
  2. 如果上述不起作用,請嘗試將persistence.xml移動到src/main/java/META-INF文件夾。
  3. 更改爲在persistence.xml中提供商

    org.hibernate.ejb.HibernatePersistence

+0

你好,託尼。謝謝你的迴應。但我試過將文件夾移動到src/main/java,結果相同。此外,我檢查了在Eclipse/Java和/資源是在沒有任何排除文件的構建路徑。 – wazz

+0

是否將persistence.xml確實複製到目標WEB-INF/classes文件夾中? Alo嘗試我上面的第三個建議。 –

+0

謝謝。這是獨立的應用程序,它不應該有我認爲的WEB-INF。 – wazz