java - 如何在JPA中返回交易结果

标签 java ejb-3.0 jpa-2.0

只是一个背景,因为我在一个旧项目上工作,所以习惯使用 JDBC。 保存到数据库时,对于任何不成功的插入,我总是将值设置为 -1

public class StudentDao{
    //This dao method returns -1 if unsuccessful in saving
    public int save(Student stud){
        Statement st = con.createStatement();
        try{
            int val = st.executeUpdate("INSERT student VALUES(.......)");
        }catch(Exception e){
            return -1;
        }
    }
}

根据返回结果,我可以判断插入是否成功,以便我可以执行准确的逻辑。 (告诉用户交易未完成...)

现在,我在持久化实体中使用了 EJB。我看到的大多数教程都只有这种结构。 Netbeans 生成的代码也带有“void”返回值。

@Stateless
public class StudentFacade{
    @PersistenceContext(unitName = "MyDBPU")
    private EntityManager em;

    public void save(Student student){
        em.persist(student);
    }
}

在 servlet 上保存实体时,它只需调用如下代码所示的方法。

@WebServlet(name = "StudentServlet",
loadOnStartup = 1,
urlPatterns = {
    "/addStudent",})
public class StudentServlet extends HttpServlet {
    @EJB
    private StudentFacade studentFacade;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //extract HTTP form request parameters then set 
        Student stud = Util.getStudent(request);

        studentFacade.save(stud);

    }
}

但是我怎么知道插入是否成功呢? (不要捕获异常然后让它传播。 我已经配置了我的错误页面,所以显然这会捕获错误???)

抱歉,我对集成 EJB 组件感到困惑,但我看到了它的好处。 我只需要一些关于某些项目的建议。谢谢。

最佳答案

容器会将异常传播给调用者(如果您不在 EJB 内对其执行任何操作)。我猜这可能是 SQLException。您可以在 servlet 上捕获它并用它做任何您想做的事情。如果您使用容器管理事务 (CMT),容器将自动为您回滚事务,并且不会添加学生对象。正如你所说,你当然也可以将异常保留在Web层上,然后为其准备一个特殊的错误页面。一切取决于您的使用场景。

关于java - 如何在JPA中返回交易结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7631899/

相关文章:

java - 使用相应的 getter/setter 搜索/替换属性

java - 我的 JSpinner 不更改也不接受我对其所做的任何更改

java - 将 Java 构造函数与 Hibernate 查询结合使用

java - JPQL 限额查询

session - 无状态 session bean 中的实例变量

inheritance - 具有抽象关系的 JPA 2 Inheritance.TABLE_PER_CLASS

java - Polarion ALM SDK API getWorkItem()

java - Spring Boot MongoRepository 空指针异常

java - 使用 JSF 2 和 EJB 3.1 的 @Stateful 和 @SessionBean 有什么区别?

jakarta-ee - 在 @Asynchronous 方法调用期间销毁有状态 bean 会发生什么?