JPA - Hibernate @onetoone

2 respostas
thiagopinheiro

Olá galera, sou novo no fórum e esta é minha primeira pergunta.

Criei um relacionamento entre duas classe Pessoa e Endereco usando onetone com persistencia em cascata. Criei uma classe para testar um inset, mas da erro.
Console erro
(Mon May 18 01:46:40 GMT 2009 WARN: Invalid value {1} for server variable named {0}, falling back to sane default of {2}.
Exception in thread “main” java.lang.NullPointerException
at teste.AdicionaPessoaFisica.main(AdicionaPessoaFisica.java:25))

public class Pessoa implements Serializable{

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

private Long idPessoa;

private String nome;

@OneToOne(cascade ={CascadeType.PERSIST},  mappedBy=pessoa)

private Endereco endereco;

//metodos get e set

}

public class Endereco implements Serializable{

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long idEndereco;
@Column(name="DCRUA")
private String rua;
@OneToOne
@JoinColumn(name="idPessoa", referencedColumnName="idPessoa", unique=true)
private Pessoa pessoa;
            //metodos get e set

}

public class AdicionaPessoaFisica {

public static void main(String[] args)
{
	EntityManagerFactory emf = Persistence.createEntityManagerFactory("testePU");
	EntityManager em = emf.createEntityManager();
	
	Pessoa pessoa = new Pessoa();
	
	pessoa.setNome("JOSE ARAGÃO mane");
	pessoa.getEndereco().setRua("rua teste");//O console acusa erro nesta linha
	
	em.getTransaction().begin();
	
	try {
		em.persist(pessoa);
		em.getTransaction().commit();
	}catch (Exception e) {
		em.getTransaction().rollback();
		System.out.println("ERRO: "+ e.getMessage());
	}		
	em.close();
	emf.close();
}

}

Acredito que o relacionamento está certo, deve ta faltando alguns detalhe.

2 Respostas

panthovillas

vc nao esta instanciando o endereco em pessoa…

Pessoa pessoa = new Pessoa();

// pessoa.getEndereco() => isso vai retornar nulo
pessoa.setEndereco(new Endereco());

pessoa.getEndereco().setRua("BLABLABLA");
thiagopinheiro

É verdade faltou instanciar endereco em pessoa. O código funcionou mas a chave extrangeira foi gravada como null.

Consele

Tue May 19 00:24:24 GMT 2009 WARN: Invalid value {1} for server variable named {0}, falling back to sane default of {2}.

Hibernate: insert into Pessoa (nome) values (?)

Hibernate: insert into Endereco (idPessoa, DCRUA) values (?, ?)

[b]Conteudo tabelas gerado:

Tabela Pessoa

idPessoa - Nome [/b]
1 - JOSE

[b]Tabela Endereco

idEndereco - DCRUA - idPessoa[/b]
1 - rua teste - [color=red] null[/color]

Ou seja na tabela Endereco gravou o coluna idPessoa com valor null.
Tem alguma ideia.

valeu pela ajuda

Criado 17 de maio de 2009
Ultima resposta 18 de mai. de 2009
Respostas 2
Participantes 2