Seguinte,
Tenho uma SuperClasse chamada Base, com seus atributos, por exemplo:
@Inheritance(strategy = InheritanceType.JOINED)
public class Base implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Integer excluido;
private String descricao;
private String metodo;
private Integer tempo;
}
e duas SubClasses:
@Entity
@PrimaryKeyJoinColumn(name="idBase")
public class Base1 extends Base implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Date data;
}
@Entity
@PrimaryKeyJoinColumn(name="idBase")
public class Base2 extends Base implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String link;
}
O mapeamento esta ok, criou tudo no banco de dados.
Agora estou diante da seguinte situação, preciso criar uma Base, mas ainda não sei se ela é do tipo Base1 ou do tipo Base2, tava pensando em disponibilizar para o usuário, a possibilidade dele escolher se quer criar Baser1 / Base2, mas para referenciar isso em minha página ou dialog, que fiquei perdido.
Se Tenho em meu Bean:
private Base base;
private Base1 base1;
private Base2 base2;
E como eu chamaria na minha página?
Se quero colocar a descricao, posso por #{meuBean.base.descricao}, assim como #{meuBean.base1.descricao} e #{meuBean.base2.descricao} que obviamente vai funcionar, mas se eu precisar colocar os atributos específicos da subclasse, eu teria que chamar ou base1 ou base2 certo? e ai, teria que replicar tudo na minha página e ter 2 códigos específicos caso seja Base1 ou base2 ?
exemplo:
#{meuBean.base1.descricao} rendered caso o usuário tenha selecionado o tipo Base1
#{meuBean.base1.data} rendered caso o usuário tenha selecionado o tipo Base1 e
#{meuBean.base2.descricao} rendered caso o usuário tenha selecionado o tipo Base2 e
#{meuBean.base2.link} rendered caso o usuário tenha selecionado o tipo Base2
Como podem ver estou meio perdido… to achando muita burrice repetir todo o código para cada situação.
Ademais, eu poderia deixar todos os atributos de base e só os especificos em base1 e/ou base2, mas dai na hora que fosse pro meu Bean /Controller, eu teria que fazer:
base1.setDescricao (base.getDescricao())
base1.setExcluido.....