我是JSF和Hibernate的新手,所以如果这个问题很简单,我很抱歉。
我正在使用MySQL数据库,我的users表有一个布尔列。 Hibernate将hbm.xml中的值映射为
<property name="verified" type="boolean">
<column name="verified" not-null="true"/>
</property>
使用NetBeans中的HQL查询窗口运行查询时
update Users set verified = false where email = 'mail@mail.com'
它完美地设置了布尔值true和false。但是在我的帮助器类中,我有这个方法来设置值
public void setIsVerified(Users user, Boolean isVerified){
Transaction tx = null;
try{
tx = session.beginTransaction();
Query q = session.createQuery("update Users set verified = :verified where email = :email");
q.setParameter("verified", isVerified);
q.setParameter("email", user.getEmail());
q.executeUpdate();
}catch(RuntimeException e){
if(tx != null)
tx.rollback();
throw e;
}
}
但它没有设置值。我尝试手动设置值q.setParameter("verified", true);
它也没有用。 (电子邮件是唯一字段,我也尝试使用ID字段作为主键。)
有趣的是,当我使用JUnit运行此方法时,它不会产生任何错误消息或警告。它看起来很完美,但并没有改变数据库中的值。
任何提示都会受到赞赏,因为我没有收到任何我不知道在哪里搜索的邮件。我不知道背景会发生什么。提前谢谢..
答案 0 :(得分:1)
由于您在方法开头显式调用beginTransaction,因此必须在完成工作单元之前调用tx.commit()。
使用hibernate的一个优点是,您可以声明性地进行事务管理http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html。