em.refresh(o)上的“ EntityNotFoundException:实体不再存在于数据库中”

马卡西

我正在做的只是创建一个对象,然后尝试将其保存到数据库中。

 public O create(O o) {
        em.getTransaction().begin();
        em.persist(o);
        em.getTransaction().commit();
        em.refresh(o);
        return o;
    }

这是实体类:

@Entity
@Table(name = "o")
public class O implements Serializable {
    private static final long serialVersionUID = 1L;

    private int id;

    @ManyToOne(cascade=CascadeType.REFRESH, fetch = FetchType.LAZY)
    @JoinColumn(name = "b_id")
    private B b;

    @OneToMany(fetch = FetchType.EAGER ,  cascade = CascadeType.ALL)
    @JoinTable(name="o_p", 
    joinColumns=@JoinColumn(name="o_id", referencedColumnName="id"),
    inverseJoinColumns=@JoinColumn(name="p_id", referencedColumnName="id"))
    private List<P> p; 

怎么了... :

DataService<O> das = new ODataService();
O o = new O();
das.create(O);

对象是在数据库中创建的,并且事务结束,但是在刷新(o)时,实体管理器正在查询id为0的O,但O id会自动递增为某个不为0的值。因此,按0进行查询将不返回任何内容,抛出EntityNotFoundException。为什么刷新正在搜索ID为0的对象?可能是对象o在缓存中未更新,而EntityManager仍然认为该对象的ID为0;

尼伯(JB Nizet)

该ID由数据库自动生成。但是JPA对此一无所知,因为您还没有告诉过它。因此,它假设实体的ID是调用时的实体ID persist():0。

您必须告诉JPA,数据库会生成ID:

@GeneratedValue(strategy = IDENTITY)
private int id;

这样,在JPA将行插入数据库后,它将向数据库询问生成的密钥,并将其分配给ID。因此,您的刷新将无用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

添加具有多对一关联且反面已存在于数据库中的实体

来自分类Dev

如何生成随机代码并检查其是否存在于数据库中

来自分类Dev

为什么git commits存在于我的本地克隆目录中,而不存在于GitHub上?

来自分类Dev

MVC 4即使该值确实存在于数据库中,也返回null

来自分类Dev

使用休眠检查用户是否存在于数据库中

来自分类Dev

检查日期时间对象是否存在于数据库中

来自分类Dev

当列实际上存在于数据库中时,ServiceStack OrmLite使用无效的ColumnName错误进行重做

来自分类Dev

检查记录是否存在于数据库android中

来自分类Dev

比较值是否存在于数据库中

来自分类Dev

检查值是否存在于数据库行之一中

来自分类Dev

创建之前如何检查我的数据是否已经存在于数据库中?

来自分类Dev

尝试检查用户是否存在于我的数据库中

来自分类Dev

EJB未知抽象模式,但它存在于数据库中

来自分类Dev

添加具有多对一关联且反面已存在于数据库中的实体

来自分类Dev

检查节点是否存在于我的数据库Neo4j中

来自分类Dev

如何检查输入的表是否存在于数据库中?

来自分类Dev

检查用户名是否存在于数据库中

来自分类Dev

Java检查值是否存在于数据库中

来自分类Dev

如何检查记录是否已存在于SQL数据库中?

来自分类Dev

通过Ajax在数据库中检查数据是否已存在于Codeigniter中

来自分类Dev

应该存在于 pacman 数据库中的包以某种方式不存在

来自分类Dev

文件存在于 Python 3.4 中的 Windows 与 linux 上

来自分类Dev

如何通过 CrudRepository 保存包含另一个已存在于数据库中的新实体?

来自分类Dev

检查值是否存在于数据库中或在 Laravel 中不存在

来自分类Dev

选择存在于数组中但不存在于数据库中的值?

来自分类Dev

MongoDB 数组在 Javascript 中未定义但存在于数据库中

来自分类Dev

如何从数据库 X 中的表中删除行,其中 ID 存在于数据库 Y 中

来自分类Dev

在检查输入是否存在于实际上存在的数据库中时获取 False 值

来自分类Dev

交叉表存在于一个数据库中,而不存在于另一个数据库中

Related 相关文章

  1. 1

    添加具有多对一关联且反面已存在于数据库中的实体

  2. 2

    如何生成随机代码并检查其是否存在于数据库中

  3. 3

    为什么git commits存在于我的本地克隆目录中,而不存在于GitHub上?

  4. 4

    MVC 4即使该值确实存在于数据库中,也返回null

  5. 5

    使用休眠检查用户是否存在于数据库中

  6. 6

    检查日期时间对象是否存在于数据库中

  7. 7

    当列实际上存在于数据库中时,ServiceStack OrmLite使用无效的ColumnName错误进行重做

  8. 8

    检查记录是否存在于数据库android中

  9. 9

    比较值是否存在于数据库中

  10. 10

    检查值是否存在于数据库行之一中

  11. 11

    创建之前如何检查我的数据是否已经存在于数据库中?

  12. 12

    尝试检查用户是否存在于我的数据库中

  13. 13

    EJB未知抽象模式,但它存在于数据库中

  14. 14

    添加具有多对一关联且反面已存在于数据库中的实体

  15. 15

    检查节点是否存在于我的数据库Neo4j中

  16. 16

    如何检查输入的表是否存在于数据库中?

  17. 17

    检查用户名是否存在于数据库中

  18. 18

    Java检查值是否存在于数据库中

  19. 19

    如何检查记录是否已存在于SQL数据库中?

  20. 20

    通过Ajax在数据库中检查数据是否已存在于Codeigniter中

  21. 21

    应该存在于 pacman 数据库中的包以某种方式不存在

  22. 22

    文件存在于 Python 3.4 中的 Windows 与 linux 上

  23. 23

    如何通过 CrudRepository 保存包含另一个已存在于数据库中的新实体?

  24. 24

    检查值是否存在于数据库中或在 Laravel 中不存在

  25. 25

    选择存在于数组中但不存在于数据库中的值?

  26. 26

    MongoDB 数组在 Javascript 中未定义但存在于数据库中

  27. 27

    如何从数据库 X 中的表中删除行,其中 ID 存在于数据库 Y 中

  28. 28

    在检查输入是否存在于实际上存在的数据库中时获取 False 值

  29. 29

    交叉表存在于一个数据库中,而不存在于另一个数据库中

热门标签

归档