【问题标题】:update row in DB更新数据库中的行
【发布时间】:2013-04-09 15:03:34
【问题描述】:

我正在尝试学习如何进行 CRUD 操作,但我似乎无法弄清楚如何更新数据库中的现有行。我已经让创建和删除部分正常工作,但我真的不知道如何解决更新部分。我已经用谷歌搜索了很多关于它的信息,但我找不到我完全理解的解释。

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless
public class Modell {

    @PersistenceContext(unitName = "mess")
    private EntityManager em;
    private EntityTransaction tx;

    public void addMessage(String message) {
        EntityDB me = new EntityDB();
        me.setMessage(message);
        em.persist(me);
    }


    public void delete(EntityDB entityDB) {
        em.remove(em.merge(entityDB));

    }

    public void edited(EntityDB entityDB) {
        EntityDB me = new EntityDB();
        //tx.begin();
        em.persist(me);
      // EntityDB me = new EntityDB();
        me.setMessage("edited");
        em.merge(entityDB);
        //tx.commit();

    }

    public List<EntityDB> findAll() {
        Query namedQuery = em.createNamedQuery("findAllMessageEntities");
        return namedQuery.getResultList();
    }
}

有人可以在这个问题上指出我正确的方向吗?到目前为止,edit 方法只添加了另一行。

【问题讨论】:

    标签: jpa crud


    【解决方案1】:

    如果必须更新实体,则必须对数据库中的现有实体应用更改,而不是创建新实例。

    public void edited(EntityDB entityDB) {       
    
      EntityDB me = em.find(EntityDB.class, pk); //-- Else create query
      me.setMessage("edited");
      em.merge(me);
    }
    

    【讨论】:

    • 顺便说一句,不需要merge() 电话; find() 调用已将找到的实体置于持久性上下文中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    相关资源
    最近更新 更多