JSF将对象保存到数据库而不告知这样做

时间:2016-05-18 16:56:13

标签: hibernate persistence

我正在使用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。

您能解释一下它的工作原理以及使用这种方式是否安全。

感谢。

1 个答案:

答案 0 :(得分:0)

我认为您正在使用附加实体。在这种情况下,任何实体更改都将触发数据库更新。

如果您使用EJB作为StudentUtil的服务,则会自动分离所有已加载的实体。否则你必须自己分开。