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);
}
}
这是正常的休眠方式吗?我怎么知道我的插入是否成功?有什么想法吗?
答案 0 :(得分:1)
让我们假设 booknumber 是主键,我希望你把它作为主键提到。然后在createBook()方法中你开始很好但是你使用 session.saveOrUpdate( bookObj); 声明。因此,您没有遇到任何类型的密钥违例异常。虽然保存它正在寻找记录,如果它不存在然后它将保存在数据库中,但如果它存在,那么它将更新该记录,因此你不会收到任何类型的异常。而不是如果你使用 session.save(bookObj); 如果正确定义主键,它肯定会给你主键异常。
答案 1 :(得分:0)
您需要发布更多信息,例如表格的主键。除非修改已保存对象的主键值,否则在使用saveOrUpdate时不会出现Hibernate异常。