2012-12-18 51 views
-2

在我的项目,我得到“无法插入表中的错误”,我加入necesarry部分代码在这里和最好:)无法插入Java中Hibernate的MySQL数据库表错误

我的登录希望类

package DAO; 

import org.hibernate.Hibernate; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.cfg.AnnotationConfiguration; 

import tables.Users; 

public class LogIn { 
Session session; 

public boolean RegisterUsers(Object user) { 

    if (SaveDatabase(user)) { 
     return true; 
    } else { 
     return false; 
    } 

} 

public boolean GetUsersWithId(Users user) { 

    SessionFactory sessionfactory = new Configuration().configure() 
      .buildSessionFactory(); 
    session = sessionfactory.openSession(); 

    user = (Users) session.get(Users.class, user.getUserId()); 
    session.close(); 
    if (user == null) { 
     return false; 
    } else { 
     return true; 
    } 

} 

public boolean SaveDatabase(Object object) { 
    try { 

     Session session = HibernateUtil.getSessionFactory().openSession(); 
     Transaction transaction = null; 
     Long courseId = null; 
     try { 
      transaction = session.beginTransaction(); 
      session.save(object); 
      courseId = (Long) session.save(object); 
      transaction.commit(); 
     } catch (Exception e) { 
      transaction.rollback(); 
      System.out.println(e.getMessage()); 
      return false; 
     } 
    } finally { 
     session.close(); 
    } 
    return true; 
} 

} 

HibernateUtil作为这些代码

package DAO; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 

public class HibernateUtil { 
private static final SessionFactory sessionFactory; 
static { 
    try { 
     sessionFactory = new Configuration().configure() 
       .buildSessionFactory(); 
    } catch (Throwable ex) { 
     System.err.println("Initial SessionFactory creation failed." + ex); 
     throw new ExceptionInInitializerError(ex); 
    } 
} 

public static SessionFactory getSessionFactory() { 
    return sessionFactory; 
} 
} 

测试类

import DAO.LogIn; 
import tables.Location; 
import tables.Users; 

public class Test { 
public static void main(String[] args) { 
    // Test RegisterUser and GetUsersWithId in here 

    LogIn test = new LogIn(); 
    Users user = new Users(); 

    user.setUserEmail("email"); 
    user.setUserAdress("adres here"); 
    user.setUserFbId(3); 
    test.RegisterUsers(user); 

} 
} 

Exact Error

感谢您的帮助

编辑:删除配置。 xml文件和自动创建的用户类来清理混乱。

+0

这是一个巨大的代码量。有人打算为你调试吗?你能提供一个[简短的例子](http://sscce.org/),大约是其大小的四分之一,并产生相同的错误? – Ben

+0

您能否将代码简化为一个最简单的示例并添加一个确切的错误消息/堆栈跟踪? – micha

+0

另外,用户类的变量太多了。你应该把它重构成其他对象。 –

回答

2

你有命名session局部变量也叫session。您打开休眠会话并将其分配给本地变量,但关闭字段而不是本地变量

删除session字段。你不应该像这样在一个字段中存储一个Hibernate Session。这没有意义。然后您将得到一个编译错误,您需要通过在更大范围内(try块之外)声明会话局部变量来解决这个问题。

+0

我已经做了你所说的,谢谢你的提示:) 现在插入错误变成只是“无法插入:[tables.Users]” 我的意思是,空指针异常已经走了,谢谢你 –

0

相同的字段名称在类级别的全局范围内,另一个名称在SaveDatabase()方法下的本地范围内。

解决方案:删除全局范围会话。

public class LogIn { 
    Session session; //Remove this field .....