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();
}
}
}