Hibernate - Relacionamento

3 respostas
viniciuspadua

Tenho duas tabelas A e B, onde a A sempre existe e a B não necessariamente. A chave da tabela B é a mesma chave da tabela A.

Fiz o mapeamento assim:

@Entity
@Table(name = "tabelaA")
public class A {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "Id_A", unique = true, nullable = false)
	private int idA;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_A", nullable = true)
	private B b;

	...
}


@Entity
@Table(name = "tabelaB")
public class B {

	@Id
	@Column(name = "id_A", unique = true, nullable = false)
	private int idA;

	...
}

tudo funciona blz, entretanto quando existe a entidade A e não existe a entidade B e faço um:

if (a.getB() != null)
   System.out.println("Work");

ocorre a execption:
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [br.com.br.B#86]

Gostaria de saber como faço esse tipo de mapeamento quando A existe e B não obrigatoriamente existe!
Onde estou errando no mapeamento.

3 Respostas

juniorsatanas

B é temporaria ?

ignacio83

Isso que vc está tentando fazer me parece especialização/herança…

Ou seja B deveria ser uma subclasse do tipo A…

Dê uma lida aki:
http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/#mapping-declaration-subclass
e aki:
http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e829

viniciuspadua

não são temporarias!
são tabelas independentes com campos independetes!

creio que é um relacionamento di tipo left join!

Criado 1 de março de 2010
Ultima resposta 1 de mar. de 2010
Respostas 3
Participantes 3