使用JPA的Openejb - 能够检索但无法插入数据库

时间:2013-01-21 06:56:29

标签: jpa ejb-3.0 eclipselink openejb

我使用openejb作为我的独立容器来运行我的单元测试用例,在所有测试的所有测试中,我能够检索值但无法插入或更新。即使我尝试了entitymanager.merge(obj),它也正确地选择了值,但它没有更新它。

我是新手,所以请帮我解决这个错误

提前致谢

我的persistence.xml文件

 <persistence-unit name="test"
        transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>java:/OracleDS</jta-data-source>
.....entity classes.....
<properties>
            <property name="eclipselink.target-server" value="JBoss" />
            <property name="eclipselink.target-database" value="Oracle" />
            <property name="eclipselink.logging.level" value="FINE" />
            <property name="eclipselink.logging.parameters" value="true" />
        </properties>
    </persistence-unit>  

我的道法

tp.setname("van");
tp.settype("vehicle");
//entityManager.getTransaction().begin();
entityManager.merge(tp);
//entityManager.getTransaction().commit();

2 个答案:

答案 0 :(得分:0)

执行以下操作

坚持新实体:

Transport tp = new Transport();
tp.setname("van");
tp.settype("vehicle");
entityManager.getTransaction().begin();  
entityManager.persist(tp);
entityManager.getTransaction().commit();

更新现有实体:

Query qry = entityManager.createQuery("Select t from 
                                       Transport t where t.type ='vechicle'");
List list = qry.getResultList();
//assume result return single entity
Transport tp = list.get(0);
tp.setInspectionDone(new Date()) ;
entityManager.getTransaction().begin();
entityManager.merge(tp);
entityManager.getTransaction().commit();

答案 1 :(得分:0)

我认为您需要在班级或方法中添加@Transactional注释