gpt4 book ai didi

java - JPA 实体未更新

转载 作者:行者123 更新时间:2023-11-29 08:54:06 27 4
gpt4 key购买 nike

我在 Glassfish 4 上使用 Servlet->EJB->JPA。应用程序部署成功。

当我运行 servlet 时,它会更新数据库中 id=1 的实体,但不会对 id=2 的实体执行任何操作。 没有抛出异常。

@WebServlet("/AnimalServlet")
public class AnimalServlet extends HttpServlet {

@EJB AnimalDAOLocal lOBAnimalDAO;

protected void doGet(....) {
Animal lOBAnimal = lOBAnimalDAO.getAnimal(1); // gets OK
lOBAnimal.setName("Animal1"); // sets OK
lOBAnimalDAO.mergeAnimal(lOBAnimal); // updates in DB OK
lOBAnimal = lOBAnimalDAO.getAnimal(2); // gets OK
lOBAnimal.setName("Animal2"); // sets OK
lOBAnimalDAO.mergeAnimal(lOBAnimal); // doesn't update in DB.
}

session Bean 方法是:

@Stateless(mappedName = "AnimalDAOMapped")
public class AnimalDAO implements AnimalDAOLocal {
@PersistenceContext EntityManager em;

public Animal getAnimal(int id) {
return em.find(Animal.class, id);
}

public void mergeAnimal(Animal pOBAnimal) {
em.merge(pOBAnimal);
}
}

持久化单元设置:

<persistence-unit name="JPATest" transaction-type="JTA">
<jta-data-source>jdbc/animaltest</jta-data-source>
<class>net.test.model.Animal</class>
</persistence-unit>

最佳答案

使用 flush(); 方法,抛出 PersistenceExceptionServlet 捕获该异常。

public void mergeAnimal(Animal pOBAnimal) throws PersistenceException {
try {
em.merge(pOBAnimal);
em.flush();
} catch (PersistenceException pe) {
throw e;
}
}

关于java - JPA 实体未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21246488/

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