无法在Wildquile,Arquillian设置中检索JPA实体

时间:2015-02-03 11:48:24

标签: mysql hibernate jpa wildfly-8 jboss-arquillian

更新 进一步检查表明问题出现在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(以远程配置运行,虽然本地为日食)
  2. MySQL数据库v5.6.21
  3. eclipse Luna
  4. Arquillian测试框架
  5. Wildfly服务器连接到MySQL数据库,当我运行连接测试时,它报告它能够连接。

    我创建了一个简单的'供应商'表,其中添加了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 testClass

    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>
    

    关于为什么List在测试中的大小为0的任何想法?它应该是2号。

    欢迎所有意见和建议。

1 个答案:

答案 0 :(得分:1)

最后我发现了问题。

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

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

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

大小0实际上是正确的。