将hibernate-link和JTA视为执行提供程序。我如何强迫他们不要冲洗任何东西,并自己处理它?</ p>
@Stateless
public class SomeBean{
@PersistenceContext
EntityManager em;
public void method(){
em.persist(entity); // will get managed
em.clear(); // everything gets unmanaged
}
}
我希望没有什么东西冲进数据库,但我可以在mysql shell中看到。那么如何强制EntityManager
在持续之后不要冲洗任何东西?
由于
persistence.xml
表示完整性
<persistence version="1.0" 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_1_0.xsd">
<persistence-unit name="pu" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence
<jta-data-source>jdbc/fotbalDataSource
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
答案 0 :(得分:0)
我如何强迫他们不要冲洗任何东西,并自己处理?
正如your previous question中所述,如果您想在提交JTA事务之前避免任何自动em.setFlushMode(FlushType.COMMIT)
,请使用flush
(在{{3}}结束时EJB方法)。请记住,在提交时会有flush
。
我希望没有什么东西冲进数据库,但我可以在mysql shell中看到。
我不认为你所展示的那段代码说明了上述问题,这是一个不同的问题。无论如何......在进一步说明之前,这是JPA规范关于clear()
所说的内容:
/**
* Clear the persistence context, causing all managed
* entities to become detached. Changes made to entities that
* have not been flushed to the database will not be
* persisted.
*/
public void clear();
因此clear()
会导致所有托管实体变为分离,而非非托管。
换句话说,虽然规范对您的用例有点混淆,但我认为调用clear()
不应该让实体在您的代码段中传递给persist()
<再次强大> 新 实体。
我明天会对此进行更广泛的测试(即使我认为这个用例没有多大意义)并且会更新我的答案。