我正在学习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()方法
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?
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