问题描述
- Hibernate中的session的save方法。
-
我正在学习hibernate框架,然后在做一个插入的时候遇到了一个问题。通过跟踪我发现在执行session.save(obj);方法时,程序就不动了。并且在获取session时还打印出下面红色的信息。
请问一个是什么原因以及怎么解决呢?
public int insertClient(Client client) { // TODO Auto-generated method stub //HibernateUtil.closeSession(); System.out.println("client insert1 :"); Session session = HibernateUtil.currentSession(); //System.out.println(session); System.out.println("client insert2 :"); Transaction transaction = session.beginTransaction(); System.out.println("client insert3 :"); System.out.println(client); Integer s= (Integer) session.save(client); System.out.println("client insert4 :"+s); try { transaction.commit(); } catch (Exception e) { transaction.rollback(); } finally { HibernateUtil.closeSession(); } System.out.println("row :"+s); return s; }
public class HibernateUtil { public static final SessionFactory sessionFactory; static { try { // 使用默认的hibernate.cfg.xml配置文件创建Configuration实例 Configuration cfg = new Configuration() .configure(); // 以Configuration实例来创建SessionFactory实例 ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .applySettings(cfg.getProperties()).build(); sessionFactory = cfg.buildSessionFactory(serviceRegistry); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } // ThreadLocal可以隔离多个线程的数据共享,因此不再需要对线程同步 public static final ThreadLocal<Session> session = new ThreadLocal<Session>(); public static Session currentSession() throws HibernateException { Session s = session.get(); System.out.println("session get:"); // 如果该线程还没有Session,则创建一个新的Session if (s == null) { s = sessionFactory.openSession(); // 将获得的Session变量存储在ThreadLocal变量session里 session.set(s); } return s; } public static void closeSession() throws HibernateException { Session s = session.get(); if (s != null) s.close(); session.set(null); } }
解决方案
Session的save()方法使一个临时对象转变为持久化对象。例如以下代码保存一个Customer对象:
???????Customer customer = new Customer();
???????customer.setId(new Long(9)); // 为Customer临时对象设置OID是无效的
???????customer.setName("Tom");......
答案就在这里:Hibernate Session的save()方法
解决方案二:
http://blog.sina.com.cn/s/blog_530bf5d20100byma.html
解决方案三:
你可以去看看我的博客:http://blog.csdn.net/u014427391/article/details/50621111
解决方案四:
client1已经打印,然后就不动了,是不是数据库断开了
解决方案五:
session.get ( )方法是什么,你自己定义的吗,我知道有个Session.get(Integer id )静态方法需要传入对象的id
时间: 2025-01-01 03:39:53