【问题标题】:update row in jsf2 primefaces and hibernate is not updating in databasejsf2 primefaces中的更新行和hibernate未在数据库中更新
【发布时间】:2014-10-28 12:33:15
【问题描述】:

我使用 primefaces 编辑行,并且工作正常,但是当我再次部署时,更改没有更新,并且堆栈跟踪中没有错误。我使用休眠(HQL 语言)更新数据库中的表。

* 表 Evaluacion 的模型(“modificarEvaluacion”是在调用服务和服务调用 dao 的 db 上更新的方法,onRowEdit 是单击检查按钮时调用的事件)

@ManagedBean(name="evaluacion")
@SessionScoped

public class Evaluacion implements Serializable{



 //getters and setters, methods to insert and delete that works fine.


public String modificarEvaluacion() {


    Evaluacion ev= new Evaluacion();

    ev.grupo.setGrupo_id(grupo.getGrupo_id());
    ev.setGrupo(grupo);
    boolean isUpdate= evaluacionBo.modificarEvaluacion(ev);
    if (isUpdate){System.out.println("OK");}
        return "";}



public boolean isEditable() {
    return editable;
}
public void setEditable(boolean editable) {
    this.editable = editable;
}



public String editAction(Evaluacion evaluacion) {

    evaluacion.setEditable(true);
    return null;
}



public void onRowEdit(RowEditEvent event) {

    try{
    this.modificarEvaluacion();
    FacesMessage msg = new FacesMessage("Evaluacion modificada");

    FacesContext.getCurrentInstance().addMessage(null, msg);
    } catch (Exception ex){
           FacesMessage msg = new FacesMessage("Error al modificar");

            FacesContext.getCurrentInstance().addMessage(null, msg);
    }
}

*** 服务类评估BoImpl*****

 public boolean modificarEvaluacion(Evaluacion evaluacion){

 return  evaluacionDao.modificarEvaluacion(evaluacion);}

Dao 类 EvaluacionDaoImpl

public class EvaluacionDaoImpl extends  HibernateDaoSupport implements EvaluacionDao,Serializable{


public boolean modificarEvaluacion(Evaluacion evaluacion) {


    boolean isUpdate=false;


     Transaction trns = null;
        Session session = getHibernateTemplate().getSessionFactory().openSession();
        try {
            trns = session.beginTransaction();



            Query query=session.createQuery("UPDATE Evaluacion set nombre=:nom, fecha=:fe,grupo=:grupo_id where evaluacionId=:evaluacionId");
            query.setParameter("nom",evaluacion.getNombre());
            query.setParameter("fe",evaluacion.getFecha());
            query.setParameter("grupo_id",evaluacion.getGrupo().getGrupo_id());
            query.setParameter("evaluacionId",evaluacion.getEvaluacionId());
            int row=query.executeUpdate();
            if (row==1) {
                isUpdate=true;}

           /* session.update(evaluacion);*/
            session.getTransaction().commit();
        } catch (RuntimeException e) {
            if (trns != null) {
                trns.rollback();
            }
            e.printStackTrace();
        } finally {
           // session.flush();
            session.close();
        }

        return isUpdate;

}

* 查看:Page1.xhtml*

     <h:body>
       <h:form>
    <p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />

    </h:form>

    <h:form id="form">
       <p:growl id="msgs" showDetail="true"/>

   <p:dataTable id="tablaEvaluacion"  value="#{evaluacion.listaEvaluacion}" var= "p" border="1" editable="true" style="margin-bottom:20px">
       <f:facet name="header">


     Evaluaciones 


       </f:facet>

       <p:ajax event="rowEdit" listener="#{evaluacion.onRowEdit}" update=":form:msgs" />
       <p:ajax event="rowEditCancel" listener="#{dtEditView.onRowCancel}" update=":form:msgs" />

       <p:column headerText="Id">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{p.evaluacionId}" /></f:facet>
               <f:facet name="input"><p:inputText id="modelInput" value="#{p.evaluacionId}" style="width:100%"/></f:facet>
           </p:cellEditor>
       </p:column>

       <p:column headerText="Nombre">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{p.nombre}" /></f:facet>
               <f:facet name="input"> <p:inputText value="#{p.nombre}" style="width:100%" label="Nombre"/></f:facet>
           </p:cellEditor>
       </p:column>

        <p:column headerText="Fecha">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{p.fecha}" /></f:facet>
               <f:facet name="input"> <p:inputText value="#{p.fecha}" style="width:100%" label="Fecha"/></f:facet>
           </p:cellEditor>
       </p:column>
       <p:column headerText="Grupo">
           <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{p.grupo.grupo_id}" /></f:facet>
               <f:facet name="input"><p:inputText value="#{p.grupo.grupo_id}" style="width:100%" label="Grupo"/></f:facet>
           </p:cellEditor>
       </p:column>

         <p:column headerText="Editar" style="width:32px">

          <p:rowEditor />
       </p:column>



<p:column headerText = "Eliminar">
       <p:growl id="message" showDetail="true" />
     <h:outputLabel value="Selecciona el numero de Evaluacion:"  for="txt_evid"></h:outputLabel>
            <p:inputText id="txt_evid" value="#{evaluacion.evaluacionId}" required="true"/>

    <p:commandButton  actionListener="#{evaluacion.eliminarEvaluacion}" id="iconOnly"  icon="ui-icon-trash" title="Icon Only" 
 update="message">

        <p:confirm header="Eliminar Evaluacion" message="¿Esta seguro que desea eliminar la Evaluacion?" icon="ui-icon-alert" />
    </p:commandButton>

    <p:confirmDialog global="true" >
        <p:commandButton value="Aceptar" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
        <p:commandButton value="Cancelar" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
    </p:confirmDialog>

 </p:column>



   </p:dataTable>

【问题讨论】:

    标签: hibernate jsf-2 primefaces


    【解决方案1】:

    首先,考虑 Hibernate 会话在您的应用程序范围内。您所做的所有更改都在临时会话中完成,直到它在真实数据库中刷新。您似乎错过了事务/休眠会话中的提交或刷新。然后,当您停止服务器时,您的会话终止并且所有更改(未刷新或提交)都将丢失。

    问候。

    【讨论】:

    • 谢谢,但我在事务后有一个“提交”(在 Dao 类 EvaluacionDaoImpl 中,catch 前的最后一行)和关闭会话之前的刷新(我尝试评论和取消评论,它确实同样的事情)
    【解决方案2】:

    我刚刚解决了它,将位于我的 Dao 类的“modificarEvaluacion”方法中用于更新的 hql 查询更改为 session.merge(evaluacion),我使用此文档作为参考:http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/Session.html

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多