O JPA (Java Persistence API) fornece várias anotações para mapear classes Java para tabelas de banco de dados. Uma dessas anotações úteis é a @MappedSuperclass, que é usada para designar uma classe cujas propriedades devem ser herdadas por outras classes de entidade, mas que não é uma entidade em si. Vamos explorar a utilidade dessa anotação através de um exemplo prático envolvendo classes como Veiculo, Carro e Motocicleta.
O Que é @MappedSuperclass?
A anotação @MappedSuperclass é usada para indicar que uma classe não deve ser uma entidade independente, mas que seus atributos devem ser herdados por outras classes que são entidades. Isso é útil quando você deseja compartilhar atributos comuns entre várias entidades sem criar uma tabela separada para a classe base.
Principais características:
Exemplo Prático
Vamos criar um exemplo com uma hierarquia de classes para Veiculo, Carro e Motocicleta, onde Veiculo é a superclasse.
1. Classe Base:Veiculo
import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class Veiculo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String marca; private String modelo; private int ano; // Getters e Setters }
2. Subclasse:Carro
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "carro") public class Carro extends Veiculo { private int quantidadePortas; // Getters e Setters }
3. Subclasse:Motocicleta
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "motocicleta") public class Motocicleta extends Veiculo { private boolean temSidecar; // Getters e Setters }
Mapeamento de Tabelas
Com as classes acima, o JPA criará as seguintes tabelas no banco de dados:
A tabela Veiculo não existe no banco de dados, pois a classe Veiculo é apenas uma superclasse e não uma entidade.
Benefícios de usar@MappedSuperclass
Considerações
Se você deseja que a superclasse também seja uma entidade (por exemplo, para consultas diretas), use a estratégia de herança @Inheritance em vez de @MappedSuperclass.
@MappedSuperclass é ideal para situações em que a classe base não precisa ser persistida como uma entidade individual, mas suas propriedades são relevantes para várias entidades.
Conclusão
A anotação @MappedSuperclass é uma ferramenta poderosa para criar hierarquias de classes reutilizáveis em JPA. No exemplo acima, conseguimos centralizar os atributos comuns em Veiculo e, ao mesmo tempo, manter a flexibilidade e a independência das entidades Carro e Motocicleta. Essa abordagem promove um design mais limpo e modular, especialmente em sistemas com múltiplas entidades que compartilham características semelhantes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!