Erro com JPA e Hibernate

Pessoal, estou com um problema que está me atormentando bastante.

Eu uso o Hibernate3
GlassFish Server Open Source Edition 3.1.2.2 (build 5)
Netbeans 7.2.1

O problema é que eu faço o deploy da minha aplicação e depois de algumas horas os valores retornados pela aplicação vem errado, vindo com dados com relacionamentos errados com a chave estrangeira.

meu arquivo persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    
    <persistence-unit name="eduPU-DEV" transaction-type="RESOURCE_LOCAL">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <non-jta-data-source>Relatorios-EDU</non-jta-data-source>
      <shared-cache-mode>NONE</shared-cache-mode>
      
      <properties>
          <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
          <property name="hibernate.show_sql" value="false" />
          <property name="hibernate.cache.use_second_level_cache" value="false"/>
          <property name="hibernate.cache.use_query_cache" value="false" />
          <property name="hibernate.cache.use_structured_entries" value="false" />
          <property name="hibernate.cache.generate_statistics" value="false" />
      </properties>
    </persistence-unit>
</persistence>

Meu Managed Bean:


/*
 * 
 *    _______  _______  _        _______ _________ _______  _______ _________ _______  _______         _______  ______           
 *   (  ____ )(  ____ \( \      (  ___  )\__   __/(  ___  )(  ____ )\__   __/(  ___  )(  ____ \       (  ____ \(  __  \ |\     /|
 *   | (    )|| (    \/| (      | (   ) |   ) (   | (   ) || (    )|   ) (   | (   ) || (    \/       | (    \/| (  \  )| )   ( |
 *   | (____)|| (__    | |      | (___) |   | |   | |   | || (____)|   | |   | |   | || (_____  _____ | (__    | |   ) || |   | |
 *   |     __)|  __)   | |      |  ___  |   | |   | |   | ||     __)   | |   | |   | |(_____  )(_____)|  __)   | |   | || |   | |
 *   | (\ (   | (      | |      | (   ) |   | |   | |   | || (\ (      | |   | |   | |      ) |       | (      | |   ) || |   | |
 *   | ) \ \__| (____/\| (____/\| )   ( |   | |   | (___) || ) \ \_____) (___| (___) |/\____) |       | (____/\| (__/  )| (___) |
 *   |/   \__/(_______/(_______/|/     \|   )_(   (_______)|/   \__/\_______/(_______)\_______)       (_______/(______/ (_______)
 *                                                                                                                  
 *      
 * 
 *      Copyleft (c) 2012 - 2013 Relatórios-EDU
 *
 *      http://ww2.ifro.edu.br/relatorios-edu
 *      DGTI - IFRO (69) - 2182-9623
 *          Alan de Oliveira Silva - alan.oliveira@ifro.edu.br
 *          Bruce F. Reis de Albuquerque - bruce.albuquerque@ifro.edu.br
 *          Flávio Marcos de Moraes - flavio.moraes@ifro.edu.br
 * 
 *      
 * 
 */






package br.reports.controller;

import br.reports.auth.LoggedUser;
import br.reports.model.core.CoreReport;
import br.reports.model.entities.UnidadeEnsino;
import br.reports.model.entities.VwRelDiarios2;
import br.reports.model.entities.utils.PersistenceFactory;
import java.io.IOException;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.faces.model.SelectItem;
import javax.persistence.Query;
import net.sf.jasperreports.engine.JRException;
import org.primefaces.model.StreamedContent;

/**
 *
 * @author alanoliveira
 */
public class EstatisticasController implements Serializable {
    private static final long serialVersionUID = 3830090976086552744L;

    private Integer selectedCampus;
    private Integer selectedPeriodo;
    private Integer selectedCurso;
    private Integer selectedTurma;
    private Integer selectedClasse;
    private Integer selectedDisciplina;
    private Integer selectedAno;

    public EstatisticasController() {
        selectedCampus = 0;
        selectedClasse = 0;
        selectedCurso = 0;
        selectedPeriodo = 0;
        selectedTurma = 0;
        selectedAno = 0;
    }

    public Integer getSelectedDisciplina() {
        return selectedDisciplina;
    }

    public void setSelectedDisciplina(Integer selectedDisciplina) {
        this.selectedDisciplina = selectedDisciplina;
    }

    public Integer getSelectedCampus() {
        return selectedCampus;
    }

    public void setSelectedCampus(Integer selectedCampus) {
        this.selectedCampus = selectedCampus;
    }

    public Integer getSelectedClasse() {
        return selectedClasse;
    }

    public void setSelectedClasse(Integer selectedClasse) {
        this.selectedClasse = selectedClasse;
    }

    public Integer getSelectedCurso() {
        return selectedCurso;
    }

    public void setSelectedCurso(Integer selectedCurso) {
        this.selectedCurso = selectedCurso;
    }

    public Integer getSelectedPeriodo() {
        return selectedPeriodo;
    }

    public void setSelectedPeriodo(Integer selectedPeriodo) {
        this.selectedPeriodo = selectedPeriodo;
    }

    public Integer getSelectedTurma() {
        return selectedTurma;
    }

    public void setSelectedTurma(Integer selectedTurma) {
        this.selectedTurma = selectedTurma;
    }

    //bruce
    public Integer getSelectedAno() {
        return selectedAno;
    }

    public void setSelectedAno(Integer selectedAno) {
        this.selectedAno = selectedAno;
    }

    public boolean notExist(Integer numberId, List<SelectItem> lista) {
        for (SelectItem tmp : lista) {
            if (tmp.getValue().equals(numberId)) {
                return false;
            }
        }

        return true;

    }

    public List<SelectItem> getListCampus() {
        
        List<SelectItem> lista = new LinkedList<SelectItem>();
        lista.add(new SelectItem(0, "Selecione..."));
        
        for (UnidadeEnsino el: LoggedUser.getUnidadeEnsino()) {
            lista.add(new SelectItem(el.getElementoOrganizacional().getId() ,el.getElementoOrganizacional().getNome()));
        }
        
        return lista;
    }

    public List<SelectItem> getListPeriodos() {
        Query query = PersistenceFactory.getPersistenceTransaction().getEntityManager().createNamedQuery("VwRelDiarios2.getByCampusCampus");
        query.setParameter("campus", selectedCampus);
        List<SelectItem> lista = new LinkedList<SelectItem>();

        lista.add(new SelectItem(0, "Selecione..."));

        SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");

        List<VwRelDiarios2> rel = query.getResultList();
        for (VwRelDiarios2 temp : rel) {
            if (notExist(temp.getIdPl(), lista)) {
                String data1 = formatador.format(temp.getPlDataIncio());
                String data2 = formatador.format(temp.getPlDataFim());
                lista.add(new SelectItem(temp.getIdPl(), temp.getPlAno().toString() + "/" + temp.getPlNumero().toString() + " - " + data1 + " a " + data2));
            }
        }

        return lista;
    }

    public List<SelectItem> getListCursos() {
        Query query = PersistenceFactory.getPersistenceTransaction().getEntityManager().createNamedQuery("VwRelDiarios2.getByCampusPeriodoLetivo");
        query.setParameter("campus", selectedCampus);
        query.setParameter("pl", selectedPeriodo);
        //query.setParameter("pf", LoggedUser.getLoggedUser().getPessoaFisicaId().getId());
        List<SelectItem> lista = new LinkedList<SelectItem>();

        lista.add(new SelectItem(0, "Selecione..."));
        List<VwRelDiarios2> rel = query.getResultList();
        for (VwRelDiarios2 temp : rel) {
            if (notExist(temp.getCurId(), lista)) {
                lista.add(new SelectItem(temp.getCurId(), temp.getCurNome()));
            }
        }

        return lista;
    }

    public List<SelectItem> getListTurmas() {
        Query query = PersistenceFactory.getPersistenceTransaction().getEntityManager().createNamedQuery("VwRelDiarios2.getByCampusCurso");
        query.setParameter("campus", selectedCampus);
        query.setParameter("pl", selectedPeriodo);
        query.setParameter("curso", selectedCurso);
        //query.setParameter("pf", LoggedUser.getLoggedUser().getPessoaFisicaId().getId());
        List<SelectItem> lista = new LinkedList<SelectItem>();

        lista.add(new SelectItem(0, "Selecione..."));

        List<VwRelDiarios2> rel = query.getResultList();
        for (VwRelDiarios2 temp : rel) {
            if (notExist(temp.getTurId(), lista)) {
                lista.add(new SelectItem(temp.getTurId(), temp.getTurIdentificador()));
            }
        }

        return lista;
    }

    public List<SelectItem> getListClasses() {
        Query query = PersistenceFactory.getPersistenceTransaction().getEntityManager().createNamedQuery("VwRelDiarios2.getByCampusTurma");
        query.setParameter("campus", selectedCampus);
        query.setParameter("pl", selectedPeriodo);
        query.setParameter("curso", selectedCurso);
        query.setParameter("turma", selectedTurma);
        //query.setParameter("pf", LoggedUser.getLoggedUser().getPessoaFisicaId().getId());

        List<SelectItem> lista = new LinkedList<SelectItem>();

        lista.add(new SelectItem(0, "Selecione..."));

        List<VwRelDiarios2> rel = query.getResultList();

        for (VwRelDiarios2 temp : rel) {
            if (notExist(temp.getClId(), lista)) {
                lista.add(new SelectItem(temp.getClId(), temp.getEleCurNome()));
            }
        }

        return lista;
    }
    

    //Estatisticas

    public StreamedContent getGraficoUtilizacaoSiga() throws JRException, IOException {

        Map<String, Object> parameters = new HashMap();
        
        /*Query query = PersistenceFactory.getPersistenceTransaction().getEntityManager().createNamedQuery("VwRelDiarios2.getByCampusPeriodoLetivo");
        query.setParameter("pl", selectedPeriodo);
        query.setParameter("campus", selectedCampus);
        List<VwRelDiarios2> diarios = new LinkedList<VwRelDiarios2>();
        diarios = query.getResultList();
        */
        
        //parameters.put("periodo_letivo_ano", diarios.get(0).getPlAno());
        parameters.put("periodo_letivo_ano", selectedAno);
        parameters.put("user", LoggedUser.getLoggedUser().getLogin());
        
        //criar parameter
        //ver com o flavio o arquivo jasper
        return CoreReport.doReport("reports/GraficoUtilizacaoDoSiga.jasper", parameters);
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 23 * hash + (this.selectedCampus != null ? this.selectedCampus.hashCode() : 0);
        hash = 23 * hash + (this.selectedPeriodo != null ? this.selectedPeriodo.hashCode() : 0);
        hash = 23 * hash + (this.selectedCurso != null ? this.selectedCurso.hashCode() : 0);
        hash = 23 * hash + (this.selectedTurma != null ? this.selectedTurma.hashCode() : 0);
        hash = 23 * hash + (this.selectedClasse != null ? this.selectedClasse.hashCode() : 0);
        hash = 23 * hash + (this.selectedDisciplina != null ? this.selectedDisciplina.hashCode() : 0);
        hash = 23 * hash + (this.selectedAno != null ? this.selectedAno.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final EstatisticasController other = (EstatisticasController) obj;
        if (this.selectedCampus != other.selectedCampus && (this.selectedCampus == null || !this.selectedCampus.equals(other.selectedCampus))) {
            return false;
        }
        if (this.selectedPeriodo != other.selectedPeriodo && (this.selectedPeriodo == null || !this.selectedPeriodo.equals(other.selectedPeriodo))) {
            return false;
        }
        if (this.selectedCurso != other.selectedCurso && (this.selectedCurso == null || !this.selectedCurso.equals(other.selectedCurso))) {
            return false;
        }
        if (this.selectedTurma != other.selectedTurma && (this.selectedTurma == null || !this.selectedTurma.equals(other.selectedTurma))) {
            return false;
        }
        if (this.selectedClasse != other.selectedClasse && (this.selectedClasse == null || !this.selectedClasse.equals(other.selectedClasse))) {
            return false;
        }
        if (this.selectedDisciplina != other.selectedDisciplina && (this.selectedDisciplina == null || !this.selectedDisciplina.equals(other.selectedDisciplina))) {
            return false;
        }
        if (this.selectedAno != other.selectedAno && (this.selectedAno == null || !this.selectedAno.equals(other.selectedAno))) {
            return false;
        }
        return true;
    }

    
    
    
}

O problema ocorre nos Get de Periodos Letivos e Cursos.

Um detalhe que a minha unidade mapeada é uma VIEW.

Alguém?

Você precisa analisar o log e identificar quais as queries geradas pelo sistema, ao longo deste período e identificar por que estão sendo geradas de forma diferente (se é que são geradas de forma diferente ao longo da execução do aplicativo).
Mesmo por que o hibernate vai basear as consultas nos relacionamentos ou nos parâmetros que você passou para a consulta. Ele não vai mudar a forma como realiza determinada busca só por que passaram algumas horas.