我对我的代码中涉及java(jpa)数据持久性的一个错误非常着迷。我没有开发这个,我对这个框架一点也不了解,所以,对于我没有提供的任何信息,请提前道歉。
有问题的错误是,使用entitymanager.createquery(表上的简单选择)创建的查询返回不一致的结果。也就是说,如果我通过界面更改一个值,保存更改,然后反复重新加载浏览器,有时会看到新值,有时会看到旧值。这似乎没有规律可循,因为据我所知,这是随机的。当这种情况发生时,如果我查询mysql数据库,我总能看到正确的值(“new”值)。
我都不知道该看什么。从注解如下的类中检索不一致的值:
@ManagedBean
@ViewScoped
public class DivisoreVolumenticoView implements Serializable {
此entitymanager.createquery返回的对象类型注解如下:
@ManagedBean
@Entity
@Table(name = "divisore_volumetrico")
public class DivisoreVolumetricoBean implements Serializable {
如果不一致的属性(尽管其中任何一个都会发生这种情况)是:
@Column(name = "nazionale")
private Double nazionale;
还有很多其他方法被注解为@transient,而属性的getter和setter没有任何注解。
调用createquery的entitymanager是从下面的类中检索的(当我在本地环境中执行此操作时,每次刷新浏览器时,有时会创建一个新对象,有时不会):
public class EMHelper {
private static final EntityManagerFactory emf;
private static final ThreadLocal<EntityManager> threadLocal;
static {
emf = Persistence.createEntityManagerFactory("persistenceUnit");
threadLocal = new ThreadLocal<EntityManager>();
}
public static EntityManager getEntityManager() {
EntityManager em = threadLocal.get();
if (em == null) {
em = emf.createEntityManager();
threadLocal.set(em);
}
return em;
}
如果你至少能给我指出正确的方向,我会非常感激的。例如:由于数据库中的值总是正确的,我是否应该假定更改的持久性没有问题?或者问题就在那里,而检索时出现的不一致仅仅是一种症状?
提前谢谢。
暂无答案!
目前还没有任何答案,快来回答吧!