Maison> Java> javaDidacticiel> le corps du texte

Comprendre @MappedSuperclass dans JPA

PHPz
Libérer: 2024-08-25 18:00:36
original
968 Les gens l'ont consulté

Entendendo @MappedSuperclass em JPA

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:

  1. - A classe anotada com @MappedSuperclass não é uma entidade.
  2. - Não é possível executar consultas diretamente na classe @MappedSuperclass.
  3. - As subclasses que estendem a classe @MappedSuperclass são mapeadas para tabelas individuais no banco de dados, mas herdam os campos da classe base.

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 }
Copier après la connexion
  • A classe Veiculo é anotada com @MappedSuperclass.
  • A classe Veiculo possui o campo id anotado com @id e @GeneratedValue. Este identificador único será herdado por todas as subclasses, garantindo que cada entidade derivada de Veiculo tenha um campo id.
  • Ela define três atributos comuns: marca, modelo e ano.

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 }
Copier après la connexion
  • A classe Carro herda os atributos da classe Veiculo.
  • Ela é anotada com @Entity e mapeada para uma tabela chamada carro.

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 }
Copier après la connexion
  • A classe Motocicleta também herda os atributos da classe Veiculo.
  • Ela é anotada com @Entity e mapeada para uma tabela chamada motocicleta.

Mapeamento de Tabelas

Com as classes acima, o JPA criará as seguintes tabelas no banco de dados:

  1. Tabelacarro: Contém colunas para marca, modelo, ano e quantidadePortas.
  2. Tabelamotocicleta: Contém colunas para marca, modelo, ano e temSidecar.

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

  • Centralização do Identificador: O campo id é gerenciado na superclasse. Todas as entidades derivadas deVeiculocompartilham o mesmo esquema de identificação.
  • Reutilização de Código: Atributos comuns podem ser centralizados em uma superclasse, evitando duplicação nas subclasses.
  • Facilidade de Manutenção: Alterações em atributos comuns podem ser feitas em um único lugar.
  • Modelo de Dados Coeso: As subclasses compartilham a mesma estrutura, o que facilita a manipulação e o entendimento do modelo.

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!