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 Hibername ORM, você pode mapear cada entidade para uma coleção MongoDB e usar essas entidades para interagir com os documentos da coleção.
Dica
Entities Tutorial
To view a tutorial that shows how to model one-to-many relatonships by using entities and the Hibernate ORM extension, see the Modeling Relationships With Hibernate ORM and MongoDB Foojay blog post.
Campos JSON do MongoDB
O MongoDB organiza e armazena documentos em uma representação binária chamada BSON que permite o processamento de dados flexível. 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 consultá-las em seus arquivos do aplicação . Para saber mais sobre as operações CRUD na extensão ORM do Hibernar, 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 amoviescollection a 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 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 String[] cast; public Movie(String title, String plot, int year, 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 String[] getCast() { return cast; } public void setCast(String[] cast) { this.cast = cast; } }
Dica
Para saber mais sobre os campos usados na definição da classe de entidade, consulte a seção Campos BSON do MongoDB 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 Hibernar ORM oferece suporte à incorporação de objetos únicos, matrizes 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 @Struct tipo incorporável agregado em uma entidade semelhante ao exemplo Definir uma entidade neste guia. A Movie.java classe de entidade de amostra 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 Movie.java classe de entidade de amostra 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:
To learn more about Hibernate ORM fields, see the Mapping types section in the Hibernate ORM documentation.
To learn more about Hibernate ORM entities, see POJO Models in the Hibernate ORM documentation.