执行jpa的entitymanager.createquery时结果不一致

rur96b6h  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(255)

我对我的代码中涉及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;
    }

如果你至少能给我指出正确的方向,我会非常感激的。例如:由于数据库中的值总是正确的,我是否应该假定更改的持久性没有问题?或者问题就在那里,而检索时出现的不一致仅仅是一种症状?
提前谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题