繁体   English   中英

无法检索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_

我正在尝试为大学任务创建一个项目,但似乎无法使实体管理器正常工作。

环境如下:

  1. Wildfly 8.20(在远程配置中运行,尽管在Eclipse中是本地的)
  2. MySQL数据库v5.6.21
  3. 蚀月神
  4. Arquillian测试框架

Wildfly服务器已连接到MySQL数据库,当我运行连接测试时,它报告它能够连接。

我创建了一个简单的“ Supplier”表,其中添加了2个条目。

问题是,当我运行查询以获取所有供应商实体时,它返回一个空列表。

这是我的供应商实体类

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。

欢迎所有意见和建议。

终于我找到了问题。

persistence.xml中的以下默认hibernate属性

<property name="hibernate.hbm2ddl.auto" value="create-drop" />

这会将Hibernate设置为在Wildfly服务器关闭时立即删除所有表和数据。 在我的开发环境中,这种情况经常发生。 在测试之前,我已经重新启动了wildfly服务器,并从表中删除了所有条目。

大小0实际上是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM