Java 如何使用hibernate条件按手机号码进行搜索

Java 如何使用hibernate条件按手机号码进行搜索,java,hibernate,jsp,servlets,Java,Hibernate,Jsp,Servlets,在这个程序中,我想通过mobileNumber获得详细信息。当我们来到这里时,Customer=(Customer)cr.uniqueResult()(行号28),然后它直接进入catch块并抛出此异常: 线程“main”org.hibernate.TransactionException中的异常: 事务未在成功启动 org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:100) 位于com.TestByGST

在这个程序中,我想通过
mobileNumber
获得详细信息。当我们来到这里时,
Customer=(Customer)cr.uniqueResult()(行号28),然后它直接进入catch块并抛出此异常:

线程“main”org.hibernate.TransactionException中的异常: 事务未在成功启动 org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:100) 位于com.TestByGSTNumber.main(TestByGSTNumber.java:36)


好的,根据您提供的信息,
if(transaction!=null)transaction.commit()引发异常行。否则,由于异常捕获子句,它将不会显示

我发现,出于某些其他原因,
uniqueResult()
调用抛出了一个异常(目前,将
e.printStackTrace()
作为异常块的第一行,只是将其静音就可以防止您知道发生了什么)

捕获异常并回滚事务后,执行继续到尝试提交刚才回滚的完全相同事务的finally块

最好是测试事务,而不是只检查
null
。因此,测试,
if(transaction!=null&&transaction.isActive()){…}
以检查您拥有的事务引用是否有效。查一下电话号码


我建议您进入
会话
事务
采集,在
尝试
块之外。这样,受异常处理块保护的语句将只与业务逻辑操作相关,而与准备执行所需的代码无关。

Java不是Javascript。您应该意识到这一点,并正确设置标签。
public class TestByNumber {

    public static void main(String[] args) {

        Configuration cfg=new Configuration();
        cfg.configure("com/util/hibernate.cfg.xml");
        SessionFactory factory=null;
        Session session=null;
        Transaction transaction=null;
        try{
            session =  SessionFinder.getSession();
            transaction = session.beginTransaction();
            Criteria cr = session.createCriteria(Customer.class);
            cr.add(Restrictions.eq("mobileNumber","12345"));
           Customer customer= (Customer)cr.uniqueResult();
            System.out.println("value"+customer.getCity());


        }catch(Exception e){
            if(transaction  != null)transaction.rollback();
        }
        finally{
            if(transaction!=null)transaction.commit();;
            session.flush();
        }

    }

}