EntityManager不会将实体存储到数据库中

时间:2016-02-18 09:50:42

标签: java hibernate jpa

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>

$(document).ready(function() {
  bgAudio = document.getElementById("myAudio");
  bgAudio.volume = 0.3;

  bgAudio.controls = true;
  bgAudio.loop = true;
  bgAudio.autoplay = true;

  bgAudio.src = "bg1.mp3";
  bgAudio.src = "bg2.mp3";
  bgAudio.play();

});
</script>

使用saveOrUpdate方法保存新对象时会保存对象,但下次我在分离模式下修改此对象并通过saveOrUpdate方法保存时,它始终存在于while循环中,永远不会出现在循环之外。请帮助我,我是JPA的新手,我正在将我的项目从Hibernate转换为JPA。

1 个答案:

答案 0 :(得分:0)

1)看起来你在JPA中遇到Second-Level Cache的问题。尝试检查它(我在你的代码中添加了带注释的新行):

public static MyMessage saveOrUpdate(MyMessage msg) {
    ...
    EntityManager em1 = factory.createEntityManager();
    Cache cache = em1.getEntityManagerFactory().getCache(); // get cache 
    cache.evictAll(); // remove all Entity from Cache
    MyMessage msss= em1.find(MyMessage.class, m.getId());
    System.out.println(msss);// prints null
    return m;
} 

OR

2)尝试使用

强制冲洗
    em.flush();
    EntityManager em1 = factory.createEntityManager();
    MyMessage msss= em1.find(MyMessage.class, m.getId());
    System.out.println(msss);// prints null
    return m;

3)尝试将merged更改为persist,而不是m = em.merge(msg);使用em.persist(msg); m = msg;