Alguem sabe porque o metodo addAnnotedClass nao esta aceitando o meu argumento? E quando eu altero o argumento para Produto.class, a classe funciona normalmente.
Exception in thread "main" java.lang.ExceptionInInitializerError
at br.com.jp.hibernate.TestaDaoGenerico.main(TestaDaoGenerico.java:12)
Caused by: java.lang.NullPointerException
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:263)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1333)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
at br.com.jp.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:24)
... 1 more
Legal!! assim deu certo… é que eu estava tentando receber uma classe qualquer por parametro e passar ela no metodo… mas nao tava dando certo
Muito obrigado pela ajuda… abraço
M
michelorth_92
vlw precisa tamo ai
bronx
jximenes:
Alguem sabe porque o metodo addAnnotedClass nao esta aceitando o meu argumento? E quando eu altero o argumento para Produto.class, a classe funciona normalmente.
Exception in thread "main" java.lang.ExceptionInInitializerError
at br.com.jp.hibernate.TestaDaoGenerico.main(TestaDaoGenerico.java:12)
Caused by: java.lang.NullPointerException
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:263)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1333)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
at br.com.jp.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:24)
... 1 more
Prezados,
Lembrem-se: blocos estáticos
static {
//...
}
são executados pela JVM no momento em que ela carrega a classe. Ou seja, este bloco é executado antes mesmo de se executar o construtor da classe!
Consequentemente, como o atributo classePersistente só é inicializado no construtor, no momento da execução do bloco estático o atributo encontra-se NULO.
Isso acabou gerando o nosso querido NullPointerException…!
bronx
Você pode utilizar blocos sem a cláusula static:
{
System.out.println("Um bloco qualquer...");
}
O bloco acima é “anexado” aos construtores. Ou seja, a JVM executa o construtor, e depois o bloco! ^^
jximenes
bronx:
jximenes:
Alguem sabe porque o metodo addAnnotedClass nao esta aceitando o meu argumento? E quando eu altero o argumento para Produto.class, a classe funciona normalmente.
Exception in thread "main" java.lang.ExceptionInInitializerError
at br.com.jp.hibernate.TestaDaoGenerico.main(TestaDaoGenerico.java:12)
Caused by: java.lang.NullPointerException
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:263)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1333)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
at br.com.jp.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:24)
... 1 more
Prezados,
Lembrem-se: blocos estáticos
static {
//...
}
são executados pela JVM no momento em que ela carrega a classe. Ou seja, este bloco é executado antes mesmo de se executar o construtor da classe!
Consequentemente, como o atributo classePersistente só é inicializado no construtor, no momento da execução do bloco estático o atributo encontra-se NULO.
Isso acabou gerando o nosso querido NullPointerException…!
Muito bom… nao estava me atentando a esse detalhe!!..vlw amigo
W
wesllhey
publicstaticSessiongetSession(){AnnotationConfigurationa=newAnnotationConfiguration();a.addAnnotatedClass(SuaClasse.class);// aqui deve ficar sa classe tipo se for Pessoa a.addAnnotatedClass(Pessoa.class);a.configure();SessionFactoryfactory=a.buildSessionFactory();Sessionsession=factory.openSession();returnsession;}//desse modo sua util n irá fica amarrada e vai ser disponibilizada ao acesso facil facil!!
bronx
wesllhey:
publicstaticSessiongetSession(){AnnotationConfigurationa=newAnnotationConfiguration();a.addAnnotatedClass(SuaClasse.class);// aqui deve ficar sa classe tipo se for Pessoa a.addAnnotatedClass(Pessoa.class);a.configure();SessionFactoryfactory=a.buildSessionFactory();Sessionsession=factory.openSession();returnsession;}//desse modo sua util n irá fica amarrada e vai ser disponibilizada ao acesso facil facil!!
E ae brother!
Cara, essa abordagem é totalmente não recomendada em ambiente de produção (na real, nem de testes nem em nada..rs).
Da maneira como você colocou, é necessario que se crie uma SessionFactory toda vez que se necessitar de uma Session.
Tenham em mente que SessionFactories são objetos caros, sua instanciação é uma operação custosa para o sistema.
Imaginando um sistema com milhares de acessos, criar SessionFactories para cada request certamente vai reduzir MUITO o desempenho (tempo de resposta) da sua aplicação.
O ideal é ter apenas uma SessionFactory em todo o ciclo de vida da aplicação (criada no start da mesma), e utilizá-la para criar as demais Sessions que forem requisitadas...!!
jximenes
bronx:
wesllhey:
publicstaticSessiongetSession(){AnnotationConfigurationa=newAnnotationConfiguration();a.addAnnotatedClass(SuaClasse.class);// aqui deve ficar sa classe tipo se for Pessoa a.addAnnotatedClass(Pessoa.class);a.configure();SessionFactoryfactory=a.buildSessionFactory();Sessionsession=factory.openSession();returnsession;}//desse modo sua util n irá fica amarrada e vai ser disponibilizada ao acesso facil facil!!
E ae brother!
Cara, essa abordagem é totalmente não recomendada em ambiente de produção (na real, nem de testes nem em nada..rs).
Da maneira como você colocou, é necessario que se crie uma SessionFactory toda vez que se necessitar de uma Session.
Tenham em mente que SessionFactories são objetos caros, sua instanciação é uma operação custosa para o sistema.
Imaginando um sistema com milhares de acessos, criar SessionFactories para cada request certamente vai reduzir MUITO o desempenho (tempo de resposta) da sua aplicação.
O ideal é ter apenas uma SessionFactory em todo o ciclo de vida da aplicação (criada no start da mesma), e utilizá-la para criar as demais Sessions que forem requisitadas...!!
O ideal seria colocar esse metodo getSession em um bloco static?
VandersonAssis
bronx:
Você pode utilizar blocos sem a cláusula static:
{
System.out.println("Um bloco qualquer...");
}
O bloco acima é “anexado” aos construtores. Ou seja, a JVM executa o construtor, e depois o bloco! ^^
Desculpa trazer o tópico de volta a vida. Mas não achei o motivo de se usar um bloco sem assinatura como o acima. Se ele é anexado ao construtor e executado após a execução do mesmo, porque não coloca-lo dentro do próprio construtor embaixo de tudo a favor da legibilidade?