在同一数据插入上没有Hibernate Exception

时间:2010-12-24 11:16:55

标签: java hibernate orm

Hibernate新手在这里。我不确定为什么在执行下面的代码时我没有得到任何异常。首次尝试时,此代码会在我的图书表上创建图书条目。     但我担心的是,当我再次执行下面的代码时,Hibernate没有出现任何错误。 事实上,我正在期待某种违反主键约束的行为,正如我在JDBC中所做的那样 代码。

public class BookDao {
    public void createBook(Book bookObj) {
        Session session = HibernateUtil.getSessionFactory()
                .getCurrentSession();
        session.beginTransaction();
        session.saveOrUpdate(bookObj);
        session.getTransaction().commit();
    }
}

public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new AnnotationConfiguration().configure()
                    .buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            ex.printStackTrace();
            throw new ExceptionInInitializerError(ex);
        }
    }

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

public class BookDBStarter {
    public static void main(String[] args) {
        Book bookHF = new Book();
        bookHF.setIsbn("HF-12345");
        bookHF.setName("Head First HTML");
        bookHF.setPublishDate(new Date());

        BookDao daoBook = new BookDao();
        daoBook.createBook(bookHF);
    }
}

这是正常的休眠方式吗?我怎么知道我的插入是否成功?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

让我们假设 booknumber 是主键,我希望你把它作为主键提到。然后在createBook()方法中你开始很好但是你使用 session.saveOrUpdate( bookObj); 声明。因此,您没有遇到任何类型的密钥违例异常。虽然保存它正在寻找记录,如果它不存在然后它将保存在数据库中,但如果它存在,那么它将更新该记录,因此你不会收到任何类型的异常。而不是如果你使用 session.save(bookObj); 如果正确定义主键,它肯定会给你主键异常。

答案 1 :(得分:0)

您需要发布更多信息,例如表格的主键。除非修改已保存对象的主键值,否则在使用saveOrUpdate时不会出现Hibernate异常。