JPA - Como mapear composição ter "um ou outro" objeto?

@Entity
public class Menino {
   @Id
   private int id;

   @OneToOne
   private Gato gato;

   @OneToOne
   private Cachorro cachorro;

//métodos de acesso correspondentes

como fica a tabela menino?

irá possuir duas FK ?

mas, um menino pode ter “um ou outro” animal de estimação, só pode ter 1 de cada

neste caso umas das FK da tabela menino vai ficar “null”

pode isso?

pode uma FK ficar null?

Nesse caso o menino deve ter um tipo Animal, e nao uma especie ou outra. Polimorfismo.

mas, aí vem aquele problema de herança

“prefira composição em vez de herança”

como fazer isso com composição?

[quote=Bruno Reis]mas, aí vem aquele problema de herança

“prefira composição em vez de herança”

como fazer isso com composição?[/quote]

A composição nao se aplica nesse caso específico.

Voce pode criar um tipo abstrato Animal, Gato e Cachorro herda o Animal.

Gato gato = new Gato();
//Sets
Menino menino = new Menino();
menino.setAnimal(gato);
//ou
menino.setAnimal(cachorro)