我在Glassfish 4上使用Servlet-> EJB-> JPA。应用程序成功部署。
当我运行servlet时,它将更新db中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.
}
会话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>
我借助Chris的建议打开了EclipseLink日志记录(以前我不知道)的建议,解决了这个问题。
发生此问题是由于实体中的@JoinColumn定义错误。并且第一个实体(db = 1)是偶然提交的,因为存在该id的伪数据,而其他id则不存在。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句