【问题标题】:Could not insert into table error in Java Hibernate MySQL Database无法插入 Java Hibernate MySQL 数据库中的表错误
【发布时间】:2012-12-18 21:20:16
【问题描述】:

在我的项目中我得到“无法插入表格错误”,我在这里添加了必要的代码部分并希望最好:)

我的登录课程

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

}
}

感谢您的帮助

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

【问题讨论】:

  • 那是大量的代码。有人打算为您调试它吗?你能提供一个short example,大约是大小的1/40,并产生同样的错误吗?
  • 您能否将代码简化为一个最小示例并添加确切的错误消息/堆栈跟踪?
  • 另外,对于您的用户类来说,变量太多了。您应该将其重构为其他对象。
  • 我尽力总结了这个问题。此外,Users 是一个数据库表,通过休眠自动创建,这就是为什么它上面有很多变量。
  • session.save(object); courseId = (Long) session.save(object);你为什么要这样做两次?哪一行失败了?

标签: java mysql hibernate pojo


【解决方案1】:

您有一个名为session字段,以及一个也名为session局部变量。您打开一个 Hibernate 会话并将其分配给 局部变量,但您关闭了 字段 而不是 局部变量

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

【讨论】:

  • 我已经完成了你所说的,谢谢你的提示:) 现在插入错误变成了“无法插入:[tables.Users]”我的意思是,空指针异常已经消失了,多亏了你
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    相关资源
    最近更新 更多