我正在使用JSF 2.2和Hibernate 4.3.1。
我有这个班级
@Named
@RequestScoped
public class StudentController{
private StudentUtil studentUtil = new StudentUtil();
public List<Student> getStudents(){
return studentUtil.getAllStudents();
}
public void verify(Student student){
student.setVerified(true);
}
}
StudentUtil是我的Hibarnate实用程序类。它获取数据库中student表中的所有行。在XHTML页面中,我列出了数据表中的所有学生。
<h:dataTable value="#{studentController.students}"
var="student">
...
<h:column>
<h:form>
<h:commandButton value="Verify"
action="#{studentController.verify(student)}/>
</form>
</h:column>
</h:dataTable>
此代码工作正常。当我单击“验证”按钮时,它将verified
类的Student
字段设置为true
,但对我来说意外,它还将数据库中的字段设置为true,即使很难执行任何数据库操作。 setVerified
基本上是Hibernate生成的setter。
您能解释一下它的工作原理以及使用这种方式是否安全。
感谢。
答案 0 :(得分:0)
我认为您正在使用附加实体。在这种情况下,任何实体更改都将触发数据库更新。
如果您使用EJB作为StudentUtil的服务,则会自动分离所有已加载的实体。否则你必须自己分开。