Cara, pelo o que entendi de seu codigo, voce deve ter um relacionamento de UM usuario para MUITAS disponilidades e nao UM para UM como voce esta modelando! Para ver isso basta realizar o seguinte select:
//pesquisando todas as disponibilidades do usuario com id = 1
select diponibilidade.id from usuario, disponibilidade where usuario.id = disponibilidade.usuario_id and usuario.id = 1
Consequentemente em seu Entity Bean voce deve substituir a atributo:
private Disponibilidade disponibilidades;
//substituindo por
private Collection<Disponibilidade> disponibilidades;
Cara, supondo que voce tenha um relacionamento one-to-one entao vejo dois possiveis erros em seu codigo:
public class Disponibilidade implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
//aqui deveria ter uma @Column(name = "id")
private int id;
@JoinColumn(name = "usuario_id")
/*
*como voce tem um on-to-one aqui voce deveria ter algo
*@OneToOne(mappedBy = "disponibilidade", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
*analogo ao que voce fez na classe usuario
*/
private Usuario usuario;
Outra coisa, veja se nao esta faltando um atributo foreign-key na annotation, por exemplo: @OneToOne(mappedBy = “usuario”, cascade = CascadeType.ALL, fetch = FetchType.EAGER, foreign-key = “sua chave estrangeira”)
Veja se funciona, mas eu ainda acho que NAO se trata de um relacionamento one-to-one
Pois então, fiz um metodo utilizando apenas a tabela usuario e não me resultou erro nenhum, mas quando utilizei o relacionamento apresenta :
Exception in thread “main” java.lang.NullPointerException
at br.com.stenovoice.dao.HibernateTransactionUtils.getSession(HibernateTransactionUtils.java:51)
at br.com.stenovoice.dao.HibernateCRUDUtils.getById(HibernateCRUDUtils.java:99)
at br.com.stenovoice.dao.BaseDAO.getByPrimaryKey(BaseDAO.java:37)
at br.com.stenovoice.application.UsuarioService.getUsuarioPorId(UsuarioService.java:62)
at br.com.stenovoice.teste.UsuarioTeste.main(UsuarioTeste.java:22)
[quote=Renato_natos]Pois então, fiz um metodo utilizando apenas a tabela usuario e não me resultou erro nenhum, mas quando utilizei o relacionamento apresenta :
Exception in thread “main” java.lang.NullPointerException
at br.com.stenovoice.dao.HibernateTransactionUtils.getSession(HibernateTransactionUtils.java:51)
at br.com.stenovoice.dao.HibernateCRUDUtils.getById(HibernateCRUDUtils.java:99)
at br.com.stenovoice.dao.BaseDAO.getByPrimaryKey(BaseDAO.java:37)
at br.com.stenovoice.application.UsuarioService.getUsuarioPorId(UsuarioService.java:62)
at br.com.stenovoice.teste.UsuarioTeste.main(UsuarioTeste.java:22)
o que será?[/quote]
o que tem nessa HibernateTransactionUtils.java:51?
Acontece que fiz o mapeamento da tabela usuario sem nenhuma relação e criei um método para buscar por id, e deu certo, e agora inclui a relação de um para um e pedi para buscar por id e deu errado.
Pelo que pude perceber o erro está no mapeamento das tabelas. Mas mesmo assim na linha 51 têm o seguinte código:
session = sessionFactory.openSession();
este programa já foi testado anteriormente e deu certo, mas não consigo tirar da cabeça que o erro é do mapeamento!!
Obrigado
[quote]Exception in thread “main” java.lang.NullPointerException
at br.com.stenovoice.dao.HibernateTransactionUtils.getSession(HibernateTransactionUtils.java:51)
at br.com.stenovoice.dao.HibernateCRUDUtils.getById(HibernateCRUDUtils.java:99) [/quote]
O erro está nessa classe: HibernateTransactionUtils.java:51
Mande o código completo dela. Provavelmente o sessionFactory está null.
[code]public HibernateTransactionUtils() {
try {
// Cria a instância da SessionFactory
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
HibernateTransactionUtils.setSessionFactory(sessionFactory);
} catch (Throwable ex) {
// Não foi possível iniciar a SessionFactory - abortando a
// inicialização da aplicação e logando o problema-
log.fatal("\n\n\n\n\n\n\n>>>>>Criacao do SessionFactory falhou.\n" + ex);
}
}[/code]
Pelo que notei você está tentando chamar o método public static Session getSession() throws HibernateException. Note que ele é static, ou seja, NUNCA chama o construtor. Ou seja, tua sessionFactory SEMPRE será NULL, dando o NullPointerException.
Altere para um bloco estático:
[code] static {
try {
// Cria a instância da SessionFactory
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
setSessionFactory(sessionFactory);
} catch (Exception ex) {
// Não foi possível iniciar a SessionFactory - abortando a
// inicialização da aplicação e logando o problema-
log.fatal("\n\n\n\n\n\n\n>>>>>Criacao do SessionFactory falhou.\n" + ex);
}
}[/code]
Outra coisa, NUNCA use catch de Throwable, pois ela captura tanto exceptions como errors, sendo esses segundos basicamente não tratáveis.