2015-06-24 106 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