休眠来自一个 Bean 的太多查询

Hibernate too much queries from one Bean

我刚刚设法使我的托管 bean 成为一个请求范围,以便能够在提交后重新加载数据,而不必重新加载整个应用程序(重新启动)以查看应用程序上正在使用的新数据,但是当我什至单击任何输入,我看到另一个休眠查询选择所有表单输入

形式:

    <h:form id="formConfig">
   <h:panelGroup rendered="#{platformMB.firstedit == '0'}" >
           <p:messages id="messages" showSummary="false" showDetail="true" autoUpdate="true" closable="true" />
            <p:dataTable id="platform" var="platform" value="#{platformMB.platformData}" style="width: 90%" editable="true">  
                <p:ajax event="rowEdit" listener="#{platformMB.onEdit}" update=":formConfig:messages"/>
                <p:ajax event="rowEditCancel" listener="#{platformMB.onCancel}" update=":formConfig:messages"/>             

                <p:column headerText="Titre">
                    <f:facet name="Config">
                        <h:outputText value="TitreSite"/>
                    </f:facet>
                    <p:cellEditor>
                          <f:facet name="output">
                            <h:outputText value="#{platform.titresite}"/>
                        </f:facet>
                        <f:facet name="input">
                               <p:inputText  value="#{platform.titresite}" label="Titre">
                               <f:validateLength minimum="10" maximum="100"/>
                               </p:inputText>
                        </f:facet>             
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Description">
                    <f:facet name="Config">
                        <h:outputText value="Description"/>
                    </f:facet>
                    <p:cellEditor>
                          <f:facet name="output">
                            <h:outputText value="#{platform.description}"/>
                        </f:facet>
                        <f:facet name="input">
                               <p:inputText value="#{platform.description}" label="Description">
                                <f:validateLength minimum="0" maximum="1000"/>
                               </p:inputText>
                        </f:facet>             
                    </p:cellEditor>
                </p:column>
                 <p:column headerText="Url">
                    <f:facet name="Config">
                        <h:outputText value="Url"/>
                    </f:facet>
                    <p:cellEditor>
                          <f:facet name="output">
                            <h:outputText value="#{platform.url}"/>
                        </f:facet>
                        <f:facet name="input">
                               <p:inputText value="#{platform.url}" label="Url">
                                 <f:validateLength minimum="0" maximum="45"/>
                               </p:inputText>
                        </f:facet>             
                    </p:cellEditor>
                </p:column>                
                                 <p:column headerText="Adresse">
                    <f:facet name="Config">
                        <h:outputText value="Adresse"/>
                    </f:facet>
                    <p:cellEditor>
                          <f:facet name="output">
                            <h:outputText value="#{platform.adress}"/>
                        </f:facet>
                        <f:facet name="input">
                               <p:inputText value="#{platform.adress}" label="Adresse">
                               <f:validateLength minimum="20" maximum="500"/>
                               </p:inputText>
                        </f:facet>             
                    </p:cellEditor>
                </p:column>     
                                 <p:column headerText="Phone">
                    <f:facet name="Config">
                        <h:outputText value="Phone"/>
                    </f:facet>
                    <p:cellEditor>
                          <f:facet name="output">
                            <h:outputText value="#{platform.phone}"/>
                        </f:facet>
                        <f:facet name="input">
                               <p:inputText value="#{platform.phone}" label="Télephone">
                               <f:validateLength minimum="8" maximum="11"/>
                               </p:inputText>
                        </f:facet>             
                    </p:cellEditor>
                </p:column>           
                                 <p:column headerText="E-mail Principal">
                    <f:facet name="Config">
                        <h:outputText value="E-mail Principal"/>
                    </f:facet>
                    <p:cellEditor>
                          <f:facet name="output">
                            <h:outputText value="#{platform.primarymail}"/>
                        </f:facet>
                        <f:facet name="input">
                               <p:inputText validatorMessage="E-mail : l'adresse e-mail saisie est incorrecte" value="#{platform.primarymail}" label="E-mail">
                               <f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" />
                               </p:inputText>
                        </f:facet>             
                    </p:cellEditor>
                </p:column>     
                <p:column style="width:20%">
                <f:facet name="Config">Mise à jour</f:facet>
                <p:rowEditor/>
            </p:column>       

            </p:dataTable>


        </h:panelGroup>
        <h:panelGroup rendered="#{platformMB.firstedit == '1'}">

        <table>
            <tr>
                <td><h:outputLabel for="titresite" value="Titre de l'institution : "/></td>
                <td><p:inputText id="titresite" value="#{platformMB.titresite}">
                    <f:validateLength minimum="10" maximum="100"/>
                    <p:ajax event="blur" update="titresiteMsg"/>
                </p:inputText>
                    <p:message id="titresiteMsg" for="titresite" display="icon"/>
                </td>
            </tr>
            <tr>
                <td><h:outputLabel for="description" value="Description de l'institution : "/></td>
                <td><p:inputText id="description" value="#{platformMB.description}">
                    <f:validateLength minimum="0" maximum="1000"/>
                    <p:ajax event="blur" update="descriptionMsg"/>
                </p:inputText>
                    <p:message id="descriptionMsg" for="description" display="icon"/>
                </td>
            </tr>
                        <tr>
                <td><h:outputLabel for="url" value="Adresse du site Web d'accueil : "/></td>
                <td><p:inputText id="url" value="#{platformMB.url}">
                    <f:validateLength minimum="0" maximum="45"/>
                    <p:ajax event="blur" update="urlMsg"/>
                </p:inputText>
                    <p:message id="urlMsg" for="url" display="icon"/>
                </td>
            </tr>
                              <tr>
                <td><h:outputLabel for="adress" value="Adresse de l'institution : "/></td>
                <td><p:inputText id="adress" value="#{platformMB.adress}">
                    <f:validateLength minimum="20" maximum="500"/>
                    <p:ajax event="blur" update="adressMsg"/>
                </p:inputText>
                    <p:message id="adressMsg" for="adress" display="icon"/>
                </td>
            </tr>
                                          <tr>
                <td><h:outputLabel for="phone" value="Téléphone de l'institution : "/></td>
                <td><p:inputText id="phone" value="#{platformMB.phone}">
                    <f:validateLength minimum="8" maximum="11"/>
                    <f:converter converterId="javax.faces.Integer"/>
                    <p:ajax event="blur" update="phoneMsg"/>
                </p:inputText>
                    <p:message id="phoneMsg" for="phone" display="icon"/>
                </td>
            </tr>
                                                      <tr>
                <td><h:outputLabel for="primarymail" value="E-mail principal de l'institution : "/></td>
                <td><p:inputText id="primarymail" value="#{platformMB.primarymail}">
                    <f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" />
                    <p:ajax event="blur" update="primarymailMsg"/>
                </p:inputText>
                    <p:message id="primarymailMsg" for="primarymail" display="icon"/>
                </td>
            </tr>
            <tr>
                <td><p:commandButton id="addPlatform" value="Sauvegarder" action="#{platformMB.addPlatform}" ajax="false"/></td>
                <td><p:commandButton id="reset" value="Reset" action="#{platformMB.reset}" ajax="false"/></td>
            </tr>
        </table>

            </h:panelGroup>
        </h:form>

打开页面并点击六个输入使控制台:

Hibernate: select platform0_.ID as ID0_, platform0_.ADRESS as ADRESS0_, platform0_.DESCRIPTION as DESCRIPT3_0_, platform0_.PHONE as PHONE0_, platform0_.PRIMARYMAIL as PRIMARYM5_0_, platform0_.TITRESITE as TITRESITE0_, platform0_.URL as URL0_ from PLATFORM platform0_
Hibernate: select platform0_.ID as ID0_, platform0_.ADRESS as ADRESS0_, platform0_.DESCRIPTION as DESCRIPT3_0_, platform0_.PHONE as PHONE0_, platform0_.PRIMARYMAIL as PRIMARYM5_0_, platform0_.TITRESITE as TITRESITE0_, platform0_.URL as URL0_ from PLATFORM platform0_
Hibernate: select platform0_.ID as ID0_, platform0_.ADRESS as ADRESS0_, platform0_.DESCRIPTION as DESCRIPT3_0_, platform0_.PHONE as PHONE0_, platform0_.PRIMARYMAIL as PRIMARYM5_0_, platform0_.TITRESITE as TITRESITE0_, platform0_.URL as URL0_ from PLATFORM platform0_
Hibernate: select platform0_.ID as ID0_, platform0_.ADRESS as ADRESS0_, platform0_.DESCRIPTION as DESCRIPT3_0_, platform0_.PHONE as PHONE0_, platform0_.PRIMARYMAIL as PRIMARYM5_0_, platform0_.TITRESITE as TITRESITE0_, platform0_.URL as URL0_ from PLATFORM platform0_
Hibernate: select platform0_.ID as ID0_, platform0_.ADRESS as ADRESS0_, platform0_.DESCRIPTION as DESCRIPT3_0_, platform0_.PHONE as PHONE0_, platform0_.PRIMARYMAIL as PRIMARYM5_0_, platform0_.TITRESITE as TITRESITE0_, platform0_.URL as URL0_ from PLATFORM platform0_
Hibernate: select platform0_.ID as ID0_, platform0_.ADRESS as ADRESS0_, platform0_.DESCRIPTION as DESCRIPT3_0_, platform0_.PHONE as PHONE0_, platform0_.PRIMARYMAIL as PRIMARYM5_0_, platform0_.TITRESITE as TITRESITE0_, platform0_.URL as URL0_ from PLATFORM platform0_
Hibernate: select platform0_.ID as ID0_, platform0_.ADRESS as ADRESS0_, platform0_.DESCRIPTION as DESCRIPT3_0_, platform0_.PHONE as PHONE0_, platform0_.PRIMARYMAIL as PRIMARYM5_0_, platform0_.TITRESITE as TITRESITE0_, platform0_.URL as URL0_ from PLATFORM platform0_

这是由 RequestScoped 引起的,Ajax 也被视为请求,每当在模糊时调用验证器时发生模糊时它都会联系 Bean,使 bean 再次调用 select.

将此更改为 ViewScoped 是解决方案。