Pessoal, estou com um problema muito chato. Pesquisei muito e não consegui resolver.
É o seguinte, toda vez que eu carrego a pagina pela primeira vez… ela carrega os dados exatamente como esta no banco de dados, entretanto caso alguma alteração tenha sido feita, não importa o jeito que eu tento atualizar a pagina e os dados carregados sempre são iguais a primeira vez que eu carreguei, já tentei desativar o cache do hibernate dou clear() na sessão e a única solução é quando eu reinicio o tomcat, entretanto minha aplicação não pode ficar com esse bug pois a alteração dos dados ocorre com muita frequência!
Segue a configuração do Hibernate!
<?xml version='1.0' encoding='utf-8'?><!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://xxxxxxx:3306/sfmsp-homo?zeroDateTimeBehavior=convertToNull</property>
<property name="connection.username">root</property>
<property name="connection.password">xxxxx</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Mapeamento das entidades -->
<mapping class="hagape.domain.tb_tipo_negocio" />
<mapping class="hagape.domain.tb_categoria_produto" />
<mapping class="hagape.domain.tb_produto" />
<mapping class="hagape.domain.tb_medida" />
<mapping class="hagape.domain.tb_estoque" />
<mapping class="hagape.domain.tb_estoque_produto" />
<mapping class="hagape.domain.tb_cidade" />
<mapping class="hagape.domain.tb_uf" />
<mapping class="hagape.domain.tb_unidade_medida" />
a Servlet:
<?xml version="1.0" encoding="UTF-8" ?> Hagape<f:facet name="footer">
<p:commandButton value="Novo"
actionListener="#{categoriaProdutoBean.refresh}"
oncomplete="PF('dialogo').show();"
update=":mensagem :formCadastro:painelCadastro :formListagem:dataTableListagem">
<f:actionListener
type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" />
</p:commandButton>
</f:facet>
<p:column headerText="Nome" filterBy="#{categoria.txt_nome}"
sortBy="#{categoria.txt_nome}">
<h:outputText value="#{categoria.txt_nome}" />
</p:column>
<p:column headerText="Tipo de Negócio"
sortBy="#{categoria.tipo_negocio.txt_tipo}"
filterBy="#{categoria.tipo_negocio.txt_tipo}">
<h:outputText value="#{categoria.tipo_negocio.txt_tipo}" />
</p:column>
<p:column headerText="Categoria Pai"
filterBy="#{categoria.id_categoria_pai}">
<h:outputText value="#{categoria.id_categoria_pai}" />
</p:column>
<p:column headerText="Situação" filterBy="#{categoria.situacao}"
sortBy="#{categoria.situacao}">
<h:outputText value="#{categoria.situacao}" />
</p:column>
<p:column headerText="Opções">
<p:commandButton icon="ui-icon-pencil"
oncomplete="PF('dialogo').show();"
actionListener="#{categoriaProdutoBean.edita}"
update=":mensagem :formCadastro:painelCadastro">
<f:attribute name="categoriaSelecionada" value="#{categoria}" />
<f:actionListener
type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" />
</p:commandButton>
<p:commandButton icon="ui-icon-trash"
actionListener="#{categoriaProdutoBean.excluir}"
update=":mensagem :formCadastro:painelCadastro :formListagem:dataTableListagem">
<p:confirm header="Confirmação"
message="Voce deseja exluir essa 'Categoria'?"
icon="ui-icon-alert" />
<f:attribute name="categoriaSelecionada" value="#{categoria}" />
</p:commandButton>
</p:column>
</p:dataTable>
<p:confirmDialog global="true">
<p:commandButton value="Sim" type="button"
styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
<p:commandButton value="Não" type="button"
styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
</p:confirmDialog>
</p:panel>
</h:form>
<p:dialog header="Cadastro de Categorias" widgetVar="dialogo"
draggable="false" resizable="false" modal="true" closable="false">
<h:form id="formCadastro">
<h:panelGrid id="painelCadastro" columns="2">
<p:outputLabel for="nome" value="Nome:" />
<p:inputText id="nome"
value="#{categoriaProdutoBean.categoria.txt_nome}" maxlength="100"
size="25" required="true"
requiredMessage="O Campo 'Nome' é obrigatório!" />
<p:outputLabel for="tipoNegocio" value="Tipo Negócio:" />
<p:selectOneMenu id="tipoNegocio" filter="true"
value="#{categoriaProdutoBean.categoria.tipo_negocio}"
converter="omnifaces.SelectItemsConverter" required="true"
requiredMessage="Campo 'Tipo Negócio' obrigatório!">
<f:selectItem noSelectionOption="true"
itemLabel="Selecione um 'Tipo Negócio'"
itemValue="#{categoriaProdutoBean.negocios}" />
<f:selectItems value="#{categoriaProdutoBean.negocios}"
var="negocio"
itemLabel="#{negocio.id_tipo_negocio} - #{negocio.txt_tipo}"
itemValue="#{negocio}" />
</p:selectOneMenu>
<p:outputLabel for="categoriaPai" value="Categoria Pai:" />
<p:selectOneMenu id="categoriaPai" filter="true"
value="#{categoriaProdutoBean.categoria}"
converter="omnifaces.SelectItemsConverter">
<f:selectItem noSelectionOption="true"
itemLabel="Selecione a 'Categoria Pai'"
itemValue="#{categoriaProdutoBean.categorias}" />
<f:selectItems value="#{categoriaProdutoBean.categorias}"
var="categoriaP"
itemLabel="#{categoriaP.id_categoria} - #{categoriaP.txt_nome}"
itemValue="#{categoriaP}" />
</p:selectOneMenu>
<p:outputLabel for="ativo" value="Ativa:" />
<p:selectOneRadio id="ativo"
value="#{categoriaProdutoBean.categoria.bool_ativo}">
<f:selectItem itemLabel="Ativa" itemValue="1" />
<f:selectItem itemLabel="Inativa" itemValue="0" />
</p:selectOneRadio>
<p:outputLabel value="Observação:" />
<p:inputTextarea
value="#{categoriaProdutoBean.categoria.txt_observacao}" />
</h:panelGrid>
<h:panelGrid columns="2">
<p:commandButton value="Salvar"
actionListener="#{categoriaProdutoBean.salvar}"
update=":mensagem :formCadastro:painelCadastro :formListagem:dataTableListagem" />
<p:commandButton value="Fechar" oncomplete="PF('dialogo').hide()" />
</h:panelGrid>
</h:form>
</p:dialog>
</h:body>
a classe DAO:
package hagape.dao;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import br.com.drogaria.HibernateUtil;
public class GenericDAO {
private Class classe;
@SuppressWarnings("unchecked")
public GenericDAO() {
this.classe = (Class<Entidade>) ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
}
public void salvar(Entidade entidade) {
Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
sessao.clear();
Transaction transacao = null;
try {
transacao = sessao.beginTransaction();
sessao.save(entidade);
transacao.commit();
} catch (RuntimeException erro) {
if (transacao != null) {
transacao.rollback();
}
throw erro;
} finally {
sessao.close();
}
}
public void merge(Entidade entidade) {
Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
sessao.clear();
Transaction transacao = null;
try {
transacao = sessao.beginTransaction();
sessao.merge(entidade);
transacao.commit();
} catch (RuntimeException erro) {
if (transacao != null) {
transacao.rollback();
}
throw erro;
} finally {
sessao.close();
}
}
public void excluir(Entidade entidade) {
Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
sessao.clear();
Transaction transacao = null;
try {
transacao = sessao.beginTransaction();
sessao.delete(entidade);
transacao.commit();
} catch (RuntimeException erro) {
if (transacao != null) {
transacao.rollback();
}
throw erro;
} finally {
sessao.close();
}
}
public void editar(Entidade entidade) {
Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
sessao.clear();
Transaction transacao = null;
try {
transacao = sessao.beginTransaction();
sessao.update(entidade);
transacao.commit();
} catch (RuntimeException erro) {
if (transacao != null) {
transacao.rollback();
}
throw erro;
} finally {
sessao.close();
}
}
@SuppressWarnings("unchecked")
public List<Entidade> listar() {
Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
sessao.clear();
try {
Criteria consulta = sessao.createCriteria(classe);
List<Entidade> resultado = consulta.list();
return resultado;
} catch (RuntimeException erro) {
throw erro;
} finally {
sessao.close();
}
}
@SuppressWarnings("unchecked")
public List<Entidade> listar(String campoOrdenacao) {
Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
sessao.clear();
try {
Criteria consulta = sessao.createCriteria(classe);
consulta.addOrder(Order.asc(campoOrdenacao));
List<Entidade> resultado = consulta.list();
return resultado;
} catch (RuntimeException erro) {
throw erro;
} finally {
sessao.close();
}
}
@SuppressWarnings("unchecked")
public Entidade buscar(Long codigo) {
Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
sessao.clear();
try {
Criteria consulta = sessao.createCriteria(classe);
consulta.add(Restrictions.idEq(codigo));
Entidade resultado = (Entidade) consulta.uniqueResult();
return resultado;
} catch (RuntimeException erro) {
throw erro;
} finally {
sessao.close();
}
}
}
o pom.xml:
4.0.0
br.com.hagape
Hagape
0.0.1-SNAPSHOT
war
<!-- Codificação dos caracteres -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- Parâmetros de execução -->
<build>
<!-- Nome do projeto empacotado -->
<finalName>Hagape</finalName>
<!-- Plugins -->
<plugins>
<!-- Compilador -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<!-- Repositorios -->
<repositories>
<repository>
<id>prime-repo</id>
<name>PrimeFaces Maven Repository</name>
<url>http://repository.primefaces.org</url>
<layout>default</layout>
</repository>
</repositories>
<!-- Dependencias -->
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.11.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.2.12</version>
</dependency>
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>all-themes</artifactId>
<version>1.0.10</version>
</dependency>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>6.0</version>
</dependency>
<dependency>
<groupId>org.omnifaces</groupId>
<artifactId>omnifaces</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
e o web.xml:
<?xml version="1.0" encoding="UTF-8"?> Hagape javax.faces.PROJECT_STAGE Development Faces Servlet javax.faces.webapp.FacesServlet 1 Faces Servlet *.xhtmla classe bean:
package hagape.bean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.Application;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import org.omnifaces.util.Messages;
import hagape.dao.EstoqueDAO;
import hagape.dao.EstoqueProdutoDAO;
import hagape.dao.ProdutoDAO;
import hagape.domain.tb_estoque;
import hagape.domain.tb_estoque_produto;
import hagape.domain.tb_produto;
@SuppressWarnings(“serial”)
@ViewScoped
@ManagedBean
public class EstoqueProdutoBean implements Serializable {
private tb_estoque_produto estoqueProduto;
private List<tb_estoque> estoques;
private List<tb_produto> produtos;
private List<tb_estoque_produto> estoqueProdutos;
public tb_estoque_produto getEstoqueProduto() {
return estoqueProduto;
}
public void setEstoqueProduto(tb_estoque_produto estoqueProduto) {
this.estoqueProduto = estoqueProduto;
}
public List<tb_estoque> getEstoques() {
return estoques;
}
public void setEstoques(List<tb_estoque> estoques) {
this.estoques = estoques;
}
public List<tb_produto> getProdutos() {
return produtos;
}
public void setProdutos(List<tb_produto> produtos) {
this.produtos = produtos;
}
public List<tb_estoque_produto> getEstoqueProdutos() {
return estoqueProdutos;
}
public void setEstoqueProdutos(List<tb_estoque_produto> estoqueProdutos) {
this.estoqueProdutos = estoqueProdutos;
}
@PostConstruct
public void listar() {
try {
estoqueProduto = new tb_estoque_produto();
ProdutoDAO produtoDAO = new ProdutoDAO();
produtos = produtoDAO.listar("txt_nome");
EstoqueDAO estoqueDAO = new EstoqueDAO();
estoques = estoqueDAO.listar();
EstoqueProdutoDAO estoqueProdutoDAO = new EstoqueProdutoDAO();
estoqueProdutos = estoqueProdutoDAO.listar();
FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
javax.faces.application.ViewHandler viewHandler = application.getViewHandler();
UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());
context.setViewRoot(viewRoot);
context.renderResponse();
} catch (RuntimeException e) {
e.printStackTrace();
Messages.addGlobalError("Erro ao tentar carregar 'Lista'!");
}
}
public void refresh() {
try {
estoqueProduto = new tb_estoque_produto();
ProdutoDAO produtoDAO = new ProdutoDAO();
produtos = produtoDAO.listar("txt_nome");
EstoqueDAO estoqueDAO = new EstoqueDAO();
estoques = estoqueDAO.listar();
EstoqueProdutoDAO estoqueProdutoDAO = new EstoqueProdutoDAO();
estoqueProdutos = new ArrayList<>();
List<tb_estoque_produto> estoqueProdutos1 = estoqueProdutoDAO.listar();
estoqueProdutos = estoqueProdutos1;
FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
javax.faces.application.ViewHandler viewHandler = application.getViewHandler();
UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());
context.setViewRoot(viewRoot);
context.renderResponse();
} catch (RuntimeException e) {
e.printStackTrace();
Messages.addGlobalError("Erro ao tentar carregar 'Lista'!");
}
}
}