找不到 persistence.xml
Can't find persistence.xml
我尝试将 jpa 与 spring-orm 和休眠一起使用。
我有 mysql 数据库,交易 table。我尝试使用 jpa 处理这个 table。
我尝试使用 persistence.xml 测试 EntityManager 的创建,但我得到一个异常 "No Persistence provider for EntityManager named [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)
我不明白为什么会这样。你可以帮帮我吗?
谢谢。
Table:
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)
);
此 table 的实体 class:
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/main/resources/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>
这是测试class:
package com.madhusudhan.jsd.jpa;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.madhusudhan.jsd.domain.jpa.Trade;
public class EntityManagerTest {
private EntityManagerFactory factory;
private EntityManager entityManager;
private void init() {
factory = Persistence.createEntityManagerFactory("trade-mysql-pu");
entityManager = factory.createEntityManager();
}
public void persistTrade(Trade t) {
entityManager.persist(t);
}
public static void main(String[] args) {
EntityManagerTest test = new EntityManagerTest();
test.init();
}
}
来自 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'
}
您可以尝试的几件事:
- 检查您的 src/main/resources 文件夹是否在您的类路径中。在 Eclipse 中,这意味着右键单击项目 > Properties > Java Build Path 并确保在 Source 选项卡下指定 src/main/resources。如果不存在,请单击“添加文件夹”以添加资源文件夹。
- 如果上述方法不起作用,请尝试将您的 persistence.xml 移动到 src/main/java/META-INF 文件夹。
将 persistence.xml 中的提供商更改为
org.hibernate.ejb.HibernatePersistence
我尝试将 jpa 与 spring-orm 和休眠一起使用。
我有 mysql 数据库,交易 table。我尝试使用 jpa 处理这个 table。 我尝试使用 persistence.xml 测试 EntityManager 的创建,但我得到一个异常 "No Persistence provider for EntityManager named [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)
我不明白为什么会这样。你可以帮帮我吗? 谢谢。
Table:
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)
);
此 table 的实体 class:
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/main/resources/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>
这是测试class:
package com.madhusudhan.jsd.jpa;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.madhusudhan.jsd.domain.jpa.Trade;
public class EntityManagerTest {
private EntityManagerFactory factory;
private EntityManager entityManager;
private void init() {
factory = Persistence.createEntityManagerFactory("trade-mysql-pu");
entityManager = factory.createEntityManager();
}
public void persistTrade(Trade t) {
entityManager.persist(t);
}
public static void main(String[] args) {
EntityManagerTest test = new EntityManagerTest();
test.init();
}
}
来自 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'
}
您可以尝试的几件事:
- 检查您的 src/main/resources 文件夹是否在您的类路径中。在 Eclipse 中,这意味着右键单击项目 > Properties > Java Build Path 并确保在 Source 选项卡下指定 src/main/resources。如果不存在,请单击“添加文件夹”以添加资源文件夹。
- 如果上述方法不起作用,请尝试将您的 persistence.xml 移动到 src/main/java/META-INF 文件夹。
将 persistence.xml 中的提供商更改为
org.hibernate.ejb.HibernatePersistence