gpt4 book ai didi

jakarta-ee - 为什么实体会分离以及如何处理?

转载 作者:行者123 更新时间:2023-12-04 04:39:36 30 4
gpt4 key购买 nike

什么时候

  • 我通过无状态服务从数据库中获取实体,
  • 然后在另一个 bean 和
  • 中修改它
  • 然后想通过无状态服务将其保存到数据库中,

  • 我注意到实体已分离。我认为因为无状态服务的持久化上下文,实体从被夺取到存在。
    但是应该使用有状态服务吗?
    现在保存时我使用 EntityManager#find(ClassOfDetachedEntity,PrimaryKeyOfDetachedEntity)获取对数据库中实体的引用,然后将分离的实体分配给它。
    但这是方法吗?
    在我只将副本持久化到数据库之前,尽管我只想修改现有条目。

    更新(显示“分离”问题发生位置的快速示例):
    @Stateless
    @Log
    public class DatabaseService implements Serializable {

    @PersistenceContext
    EntityManager em;

    public List<Category> getCategories() {
    return em.createQuery("SELECT c FROM Category c").getResultList();
    }

    public void checkIfDetached(Object o){
    log.info("is detached: " + String.valueOf(!em.contains(o)));
    }
    }

    bean 日志语句会告诉我,对象已分离:
     @ManagedBean
    @ViewScoped
    public class CategoriesBean implements Serializable {
    private Category testCategory;

    @PostConstruct
    public void init(){
    testCategory = dbs.getCategories().get(0);
    dbs.checkIfDetached(testCategory);
    }
    }

    最佳答案

    分离的实体没什么大不了的,你可以很容易地把它附加回来,你知道。实际上,如果我从 EJB 3 in Action 的讲座中记得,JPA 的设计方式是尽可能短地附加实体。

    简单 merge (附回)您的实体,然后再对其执行任何 JPA 操作:

    em.merge(entity);

    关于jakarta-ee - 为什么实体会分离以及如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19111980/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com