休眠来自一个 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 是解决方案。
我刚刚设法使我的托管 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 是解决方案。