【发布时间】:2011-12-17 12:44:15
【问题描述】:
我使用 JPA 获取旧数据,即使我禁用了缓存。我猜是因为资源配置为RESOURCE_LOCAL,但我不确定。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
<persistence-unit name="AppPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.myentities.User</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/mydatabase"/>
<property name="javax.persistence.jdbc.password" value="*****"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="user1"/>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
</persistence-unit>
</persistence>
我的代码正在获取有关用户的旧信息:
public List<User> findAll(App app) {
getEntityManager().getTransaction().begin();
Query q = getEntityManager().createQuery("SELECT t1 FROM User t1 WHERE t1.app.idApp=:idApp");
q.setParameter("idApp", app.getIdApp());
getEntityManager().flush();
getEntityManager().getTransaction().commit();
List resultList = q.getResultList();
return resultList;
}
我的实体:
@Entity
@Table(name = "user")
@Cache (
type=CacheType.NONE
)
public class User implements Serializable {
// some attributtes
}
有人知道发生了什么吗?
更新 1
begin、flush 和 commit 方法只是绝望的行为!我知道不需要。
我忘了说什么重要:我做的测试是添加一个用户记录直接在数据库控制台上然后尝试通过我的webapp查看它,这是不显示新用户。也就是我说的“老数据”,它只显示“老用户”。
我已经尝试将它放在 persistence.xml 上,但我没有看到结果有任何不同:
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.cache.size.default" value="0"/>
<property name="eclipselink.cache.type.default" value="None"/>
还有别的东西……
【问题讨论】:
-
1) 仅查询时不需要启动/刷新/提交任何事务。 2) 'sistema' 对象来自哪里?为什么方法中没有使用“app”参数?
-
这就是整个方法吗?刷新和提交在那里没有任何意义。数据以什么方式陈旧?它出什么问题了?您在 EntityManager 的范围内还做了什么?打开和关闭 EM 之间的所有调用/更改是什么?有人猜测您让实体的内存状态与数据库不同步。
标签: java jpa eclipselink