Fórum Erro estranho e só na minha máquina #400758
10/05/2011
0
javax.servlet.ServletException: javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unknown Id.generator: seq_escola root cause javax.faces.el.EvaluationException: javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unknown Id.generator: seq_escola root causeAgora isso só aconteceu depois de eu tentar pegar o usuário logado e tive que fazer uma alteração assim:public List<Escola> findAll() {
List <Escola> listEscola = null;
try {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
LoginControle loginControle = (LoginControle) session.getAttribute("LoginControle");
Login login = loginControle.getLogin();
em.getTransaction().begin();
Query query = em.createQuery("select distinct esc from Escola esc ,Matricula mat" +
" where mat.idescola = esc.idescola" +
" and mat.idpessoa = 1 " + //login.getPessoa().getIdPessoa() +
" and mat.situacao = 'A' order by esc.nome");
listEscola = query.getResultList();
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
if(em.getTransaction().isActive()){
em.getTransaction().rollback();
}
}finally{
em.close();
}
return listEscola;
}
Antes era assim:public List<Escola> findAll() {
Query query = getEntityManager().createQuery("select distinct esc from Escola esc ,Matricula mat" +
" where mat.idescola = esc.idescola" +
" and mat.idpessoa = 1 " +
" and mat.situacao = 'A' order by esc.nome");
return (List<Escola>) query.getResultList();
}
Agora nenhum e nem outro e até o GlassFish começou a dar pau. É muito para mim.
Pjava
Curtir tópico
+ 0Posts
10/05/2011
Anthony Accioly
No topo da sua entidade tem que ter algo assim:
@SequenceGenerator(name="ESCOLA_SEQ", sequenceName="escola_escola_id_seq")
Onde escola_escola_id_seq é uma sequencia válida criada no seu banco:
CREATE SEQUENCE escola_escola_id_seq;
E, muito provavalmente no ID tem algo assim:
@GeneratedValue(generator="ESCOLA_SEQ", strategy=GenerationType.SEQUENCE)
Todos os três passos tem que ser executados corretamente para que isso funcione.
Gostei + 0
10/05/2011
Davi Costa
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
LoginControle loginControle = (LoginControle) session.getAttribute("LoginControle");
Login login = loginControle.getLogin();
No seu serviço vc deve batsrair essa parteo ideal seria cv passar o id como parâmetro, vc está ferindo um pouco o padrão MVC, e se um dia vc criar um web service ou passar issopara uma app desktop, não vai conseguir reaproveitar código, cada camada sua deve ter sua resposabilidade e ver a Session não é da camada de serviços, reflita sobre isso tb.
Att Davi
Gostei + 0
10/05/2011
Davi Costa
É só conferir e sequences no banco se o nome gerado lá tá batendo com o que vc mapeou.
Att Davi
Gostei + 0
10/05/2011
Pjava
Gostei + 0
10/05/2011
Dyego Carmo
Já vi vários problemas referente a sequences quando deixados para criar "automagicamente"
Gostei + 0
10/05/2011
Pjava
Gostei + 0
10/05/2011
Anthony Accioly
Seria engraçado usar um generator para obter a mesma funcionalidade de um campo Serial, auto_increment ou identity (ok, isso acontece no Oracle por falta destes). Geralmente esses geradores são usados com sequences especiais, UUIDs, e coisas do tipo. Mas eu concordo que as vezes o código apareceu lá por engano (alguém acostumado com Oracle ou coisa do genero).
Gostei + 0
10/05/2011
Pjava
(cabeçalho)
@Entity
@Table(name="escola")
@SequenceGenerator(name="seq_escola", sequenceName="escola_idescola_seq")
public class Escola implements Serializable{
@Id
@GeneratedValue(generator="seq_escola", strategy=GenerationType.SEQUENCE)
@Column(name="idescola")
private Integer idescola;
@Column(name="nome")
private String nome;
@Column(name="telefone")
private String telefone;
@Column(name="fax")
private String fax;
@Column(name="email")
private String email;
getters/setters e outrosGostei + 0
10/05/2011
Davi Costa
Muita boa as dicas do Anthony Accioly, caso um dia vc altere a app para outro banco.
É muito importante vc ter esse conhecimento.
att Davi
Gostei + 0
10/05/2011
Anthony Accioly
Paulo, se o campo é serial
@GeneratedValue(strategy=GenerationType.IDENTITY)
Nesse caso você poderia limar o SequenceGenerator.
Gostei + 0
10/05/2011
Anthony Accioly
Se sim, por favor atualize o status da chamada.
Gostei + 0
10/05/2011
Pjava
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)