Visão geral
Neste guia, você pode aprender como criar entidades ORM do Hibernar que representam coleções MongoDB. As entidades são classes Java que definem a estrutura dos seus dados. Ao usar a extensão Hibernate ORM, você pode mapear cada entidade para uma coleção MongoDB e usar essas entidades para a interação com os documentos da coleção.
Dica
Tutorial de entidades
Para exibir um tutorial que mostra como modelar relacionamentos um-para-muitos usando entidades e a extensão ORM do Hibername, consulte a publicação no blog Modelando relacionamentos com ORM do Hibername e MongoDB Foojay.
Campos JSON do MongoDB
O MongoDB organiza e armazena documentos em uma representação binária chamada BSON que permite o em processamento de dados flexíveis. Esta seção descreve o suporte da extensão Hibername ORM para campos BSON, que você pode incluir em suas entidades.
Dica
Para saber mais sobre como o MongoDB armazena dados BSON, consulte tipos de BSON no manual do MongoDB Server .
A tabela a seguir descreve os tipos de campo BSON suportados e seus equivalentes de extensão Hibername ORM que você pode usar em suas entidades Hibername ORM:
Tipo de campo BSON | Tipo de campo de extensão | Descrição do JSON |
|---|---|---|
|
| Represents a null value or absence of data. |
|
| Stores binary data with subtype 0. |
|
| Stores UTF-8 encoded string values. |
|
| Stores 32-bit signed integers. |
|
| Stores 64-bit signed integers. |
|
| Stores floating-point values. |
|
| Stores true or false values. |
|
| Stores 28-bit decimal values. |
|
| Stores unique 12-byte identifiers that MongoDB uses as primary keys. |
|
| Stores dates and times as milliseconds since the Unix epoch. |
|
| Stores embedded documents with field values mapped according to their respective
types. @Struct aggregate embeddables might also contain array or Collection
attributes. |
|
| Stores array values with elements mapped according to their respective types. Character arrays require setting the hibernate.type.wrapper_array_handling configuration property. |
Definir uma Entidade
Para criar uma entidade que represente uma coleção MongoDB , crie um novo arquivo Java no diretório do pacote base do seu projeto e adicione sua classe de entidade ao novo arquivo. Na sua classe de entidade, especifique os campos que você deseja armazenar e o nome da coleção. O elemento name da anotação @jakarta.persistence.Table representa seu nome de coleção MongoDB . Use a seguinte sintaxe para definir uma entidade:
public class <EntityName> { private ObjectId id; // Include additional fields here private <field type> <field name>; // Parameterized constructor public <EntityName>(<parameters>) { // Initialize fields here } // Default constructor public <EntityName>() { } // Getter and setter methods public <field type> get<FieldName>() { return <field name>; } public void set<FieldName>(<field type> <field name>) { this.<field name> = <field name>; } }
Para utilizar suas entidades, você pode fazer query neles em seus arquivos do aplicativo. Para saber mais sobre as Operações CRUD na extensão ORM do Hibernate, consulte o guia Executar Operações CRUD.
Exemplo
Esta classe de entidade do Movie.java de amostra define uma entidade do Movie que inclui as seguintes informações:
@Entityanotação que marca a classe como uma entidade ORM do Hibernar@Tableanotação que mapeia a entidade para a coleçãomoviesa partir dos conjuntos de dados de amostra do Atlas@Ide@ObjectIdGeneratoranotações que designam o campoidcomo a chave primária e configuram a geração automática deObjectIdCampos privados que representam dados do filme
Construtores padrão e parametrizados para instanciação de entidade
Métodos de getter e setter que fornecem acesso aos campos da entidade
package org.example; import com.mongodb.hibernate.annotations.ObjectIdGenerator; import org.bson.types.ObjectId; import java.util.List; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; public class Movie { private ObjectId id; private String title; private String plot; private int year; private List<String> cast; public Movie(String title, String plot, int year, List<String> cast) { this.title = title; this.plot = plot; this.year = year; this.cast = cast; } public Movie() { } public ObjectId getId() { return id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getPlot() { return plot; } public void setPlot(String plot) { this.plot = plot; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public List<String> getCast() { return cast; } public void setCast(List<String> cast) { this.cast = cast; } }
Dica
Para saber mais sobre os campos usados na definição da classe de entidade, consulte a seção MongoDB BSON Fields deste guia.
Dados incorporados
A extensão Hibernar ORM suporta documentos incorporados por meio de anotações do Hibernado ORM @Embeddable. Com documentos incorporados, você pode criar relacionamentos um-para-muitos, muitos-para-um e um-para-um nos documentos do MongoDB . Esse formato é ideal para representar dados que são acessados juntos com frequência.
Para representar documentos incorporados, use as anotações @Struct e @Embeddable em uma classe para criar um agregado @Struct incorporável. Em seguida, inclua o tipo incorporável em sua entidade principal como um campo. A extensão Hibernate ORM oferece suporte à incorporação de objetos únicos, arrays e coleções de incorporáveis.
Dica
Para saber mais sobre @Struct os incorporáveis agregados,consulte Mapeamento de incorporáveis agregados do @Struct na documentação ORM do Hibernado.
Relacionamentos um-para-um
Um relacionamento um-para-um é quando um registro em um banco de dados está associado a exatamente um registro em outro banco de dados. No MongoDB , você pode criar uma coleção com um campo de documento incorporado para modelar um relacionamento um-para-um. A extensão Hibername ORM permite criar campos de documento incorporado usando @Struct embeddables agregados.
O exemplo define um campo com um tipo incorporável agregado @Struct em uma entidade semelhante ao exemplo Definir uma entidade neste guia. A classe de entidade de amostra Movie.java inclui as seguintes informações:
@Entitye anotações@Tableque definem a entidade e a mapeiam para a coleçãomovies@Ide@ObjectIdGeneratoranotações que designam o campoidcomo a chave primáriacampo de string que representa o título do filme
@Structcampos incorporáveis agregados que representam prêmios de filme e informações do atlas
O exemplo a seguir representa um relacionamento um-para-um porque cada entidade Movie está associada a um Awards incorporável e a um Studio incorporável:
public class Movie { private ObjectId id; private String title; private Awards awards; private Studio studio; public Movie(String title, Awards awards, Studio studio) { this.title = title; this.awards = awards; this.studio = studio; } public Movie() { } // Getter and setter methods }
O seguinte código de amostra cria um agregado Awards @Struct incorporável:
public class Awards { private int wins; private int nominations; private String text; public Awards(int wins, int nominations, String text) { this.wins = wins; this.nominations = nominations; this.text = text; } public Awards() { } // Getter and setter methods }
O seguinte código de amostra cria um agregado Studio @Struct incorporável:
public class Studio { private String name; private String location; private int foundedYear; public Studio(String name, String location, int foundedYear) { this.name = name; this.location = location; this.foundedYear = foundedYear; } public Studio() { } // Getter and setter methods }
Relacionamentos um-para-muitos
Um relacionamento um-para-muitos é quando um registro em um banco de dados está associado a muitos registros em outro banco de dados. No MongoDB, você pode definir um campo de coleção que armazena uma lista de documentos incorporados para modelar um relacionamento um-para-muitos. A extensão Hibername ORM permite criar campos de documento incorporado usando uma lista de @Struct incorporáveis agregados.
O exemplo define um campo que armazena uma lista de @Struct incorporáveis agregados em uma entidade semelhante ao Exemplo de Definir uma Entidade neste guia. A classe de entidade de amostra Movie.java inclui as seguintes informações:
@Entitye anotações@Tableque definem a entidade e a mapeiam para a coleçãomovies@Ide@ObjectIdGeneratoranotações que designam o campoidcomo a chave primáriacampo de string que representa o título do filme
campo de lista que armazena vários embeddables agregados do
Writer@Struct, que representa informações do escritor
O exemplo a seguir representa um relacionamento um-para-muitos porque cada entidade Movie está associada a vários incorporáveis Writer:
public class Movie { private ObjectId id; private String title; private List<Writer> writers; public Movie(String title, List<Writer> writers) { this.title = title; this.writers = writers; } public Movie() { } // Getter and setter methods }
O seguinte código de amostra cria um agregado Writer @Struct incorporável:
public class Writer { private String name; public Writer() { } public Writer(String name) { this.name = name; } // Getter and setter methods }
Informações adicionais
Para saber como usar suas entidades para executar operações de banco de dados , consulte os seguintes guias na seção Interagir com dados:
Para aprender mais sobre os campos do ORM do Hibernate, consulte a Tipos de mapeamento na documentação do ORM do Hibernate.
Para aprender mais sobre entidades ORM do Hibernate, veja Modelos POJO na documentação ORM do Hibernate.