无法在 Wildfly 中检索 JPA 实体,Arquillian 设置
Unable to retrieve JPA Entities in a Wildfly, Arquillian set up
更新
进一步检查表明问题出在 Wildfly、Hibernate 和 MySQL 的某处。检查 Wildfly 日志,我注意到它似乎正在向数据库发送请求:
12:55:04,745 INFO [stdout] (default task-8) Hibernate: select supplier0_.idsupplier as idsuppli1_0_, supplier0_.name as name2_0_ from supplier supplier0_
我正在尝试为我的大学作业创建一个项目,但我似乎无法让实体管理器正常工作。
环境如下:
- Wildfly 8.20(运行宁在远程配置中,虽然在 eclipse 本地)
- MySQL数据库v5.6.21
- 月蚀月
- Arquillian 测试框架
Wildfly 服务器已连接到 MySQL 数据库,当我 运行 连接测试时,它报告它可以连接。
我创建了一个简单的 'Supplier' table 添加了 2 个条目。
问题是当我 运行 查询以获取所有供应商实体时 returns 一个空列表。
这是我的供应商实体 class
package stockcontrol.entities;
import java.io.Serializable;
import javax.persistence.*;
/**
* The persistent class for the supplier database table.
*
*/
@Entity
@Table(name="supplier")
@NamedQuery(name="Supplier.findAll", query="SELECT s FROM Supplier s")
public class Supplier {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idsupplier;
@Column(nullable=false, length=255)
private String name;
public Supplier() {
}
public int getIdsupplier() {
return this.idsupplier;
}
public void setIdsupplier(int idsupplier) {
this.idsupplier = idsupplier;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
这是 Arqillian 测试类
package stockcontrol.entities;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
public class TestSupplier
{
@Deployment
public static WebArchive createDeployment()
{
return ShrinkWrap.create(WebArchive.class,"mTest.war")
.addPackages(true, Supplier.class.getPackage())
.addAsResource("test-persistence.xml", "META-INF/persistence.xml")
.addAsWebInfResource(EmptyAsset.INSTANCE,"beans.xml");
}
@PersistenceContext
EntityManager em;
@Test
public void test1()
{
Query q = em.createQuery("SELECT s FROM Supplier s",Supplier.class);
List<Supplier> l = (List<Supplier>)q.getResultList();
Assert.assertFalse(l.size()==0);
}
}
最后是我的 persistence.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="StockControlDS">
<jta-data-source>java:jboss/datasources/stockcontrolDS</jta-data-source>
<properties>
<!-- Properties for Hibernate -->
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.show_sql" value="false" />
</properties>
</persistence-unit>
</persistence>
关于为什么列表在测试中大小为 0 的任何想法?。它应该是 2 号。
欢迎大家提出意见和建议。
终于找到问题了
下面默认hibernate 属性在persistence.xml
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
这会将 Hibernate 设置为在 Wildfly 服务器关闭时立即删除所有 tables 和数据。在我的开发环境中,这种情况经常发生。我在测试之前重新启动了 wildfly 服务器,并从 table.
中删除了我的所有条目
尺寸 0 实际上是正确的。
更新 进一步检查表明问题出在 Wildfly、Hibernate 和 MySQL 的某处。检查 Wildfly 日志,我注意到它似乎正在向数据库发送请求:
12:55:04,745 INFO [stdout] (default task-8) Hibernate: select supplier0_.idsupplier as idsuppli1_0_, supplier0_.name as name2_0_ from supplier supplier0_
我正在尝试为我的大学作业创建一个项目,但我似乎无法让实体管理器正常工作。
环境如下:
- Wildfly 8.20(运行宁在远程配置中,虽然在 eclipse 本地)
- MySQL数据库v5.6.21
- 月蚀月
- Arquillian 测试框架
Wildfly 服务器已连接到 MySQL 数据库,当我 运行 连接测试时,它报告它可以连接。
我创建了一个简单的 'Supplier' table 添加了 2 个条目。
问题是当我 运行 查询以获取所有供应商实体时 returns 一个空列表。
这是我的供应商实体 class
package stockcontrol.entities;
import java.io.Serializable;
import javax.persistence.*;
/**
* The persistent class for the supplier database table.
*
*/
@Entity
@Table(name="supplier")
@NamedQuery(name="Supplier.findAll", query="SELECT s FROM Supplier s")
public class Supplier {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idsupplier;
@Column(nullable=false, length=255)
private String name;
public Supplier() {
}
public int getIdsupplier() {
return this.idsupplier;
}
public void setIdsupplier(int idsupplier) {
this.idsupplier = idsupplier;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
这是 Arqillian 测试类
package stockcontrol.entities;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
public class TestSupplier
{
@Deployment
public static WebArchive createDeployment()
{
return ShrinkWrap.create(WebArchive.class,"mTest.war")
.addPackages(true, Supplier.class.getPackage())
.addAsResource("test-persistence.xml", "META-INF/persistence.xml")
.addAsWebInfResource(EmptyAsset.INSTANCE,"beans.xml");
}
@PersistenceContext
EntityManager em;
@Test
public void test1()
{
Query q = em.createQuery("SELECT s FROM Supplier s",Supplier.class);
List<Supplier> l = (List<Supplier>)q.getResultList();
Assert.assertFalse(l.size()==0);
}
}
最后是我的 persistence.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="StockControlDS">
<jta-data-source>java:jboss/datasources/stockcontrolDS</jta-data-source>
<properties>
<!-- Properties for Hibernate -->
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.show_sql" value="false" />
</properties>
</persistence-unit>
</persistence>
关于为什么列表在测试中大小为 0 的任何想法?。它应该是 2 号。
欢迎大家提出意见和建议。
终于找到问题了
下面默认hibernate 属性在persistence.xml
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
这会将 Hibernate 设置为在 Wildfly 服务器关闭时立即删除所有 tables 和数据。在我的开发环境中,这种情况经常发生。我在测试之前重新启动了 wildfly 服务器,并从 table.
中删除了我的所有条目尺寸 0 实际上是正确的。