Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Eranças x JPA

Olá, não se trata de um erro mas sim uma duvida de implementação.

A duvida é: como entra as notações para classes onde envolva extends, por exemplo, se tenho uma classe Veiculo padrão com dados basicos.

@Entity
public class Veiculo{
@Id
private long codigo;
//...
 }

Então tenho outra clase chamada VeiculoTransportadora;

@Entity
public class VeiculoTransportadora extends Veiculo {
    private Transportadora transportadora;
    // ...
}

Qual a forma correta de implementar essas notações? No projeto que estou usando de exemplo a tabela criada para VeiculoTransportadora fica como nome de veiculo, mas e se eu criar outra classe VeiculoPessoal

@Entity
public class VeiculoPessoal extends Veiculo {
    private Pessoa pessoa;
    // ...
}

Qual a forma correta de anotar, para que seja criado uma tabela para cada tipo de veiculo, etc...

Espero ter sido claro na minha duvida.

grato.

3 respostas
solução!

Oi Julio, foi claro sim :).

Apenas para vc ter como guia, segue o link de explicação da própria Oracle => http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html.

Adiantando o lado aqui.

Caso vc não fale nada, ele usa a estratégia chamada de SINGLE_TABLE, que faz exatamente o que você está vendo na sua aplicação. Ele cria uma tabela só e adiciona colunas referentes aos atributos de todas as classes. Ele também adiciona uma coluna extra que serve como discriminador.

Caso você queira uma tabela por classe, você anotar a classe mãe com a annotation Inheritance(TABLE_PER_CLASS). Dessa forma será criada uma tabela por classe.

Em geral, a mais simples de se trabalhar é a primeira opção.

Valew Alberto, muito bom.

Para complementar: Você diz que a mais simples é a SINGLE_TABLE, mas qual seria a opção mais usada no mercado, qual é mais aceita e aplicada pelos programadores?

A SINGLE_TABLE mesmo :). Mais simples e é a default.