Anotação JPA @Basic
1. Visão geral
Neste tutorial rápido, exploraremos a anotação JPA _ @ Basic_. Também discutiremos a diferença entre as anotações _ @ Basic_ e _ @ Column_ JPA.
2. Tipos básicos
O JPA suporta vários tipos de dados Java como campos persistentes de uma entidade, geralmente conhecidos como tipos básicos.
*Um tipo básico é mapeado diretamente para uma coluna no banco de dados.* Eles incluem primitivas Java e suas classes de wrapper, _String_, _java.math.BigInteger_ e_ java.math.BigDecimal_, várias classes de data e hora disponíveis, enumerações e qualquer outro tipo que implementa _java.io.Serializable_.
O Hibernate, como qualquer outro fornecedor de ORM, mantém um registro de tipos básicos e o utiliza para resolver org.hibernate.type.Type de uma coluna específica.
3. _ @ Anotação Básica
Podemos usar a anotação _ @ Basic_ para marcar uma propriedade de tipo básico:
@Entity
public class Course {
@Basic
@Id
private int id;
@Basic
private String name;
...
}
Em outras palavras, a anotação _ @ Basic_ em um campo ou propriedade significa que é um tipo básico e o Hibernate deve usar o mapeamento padrão para sua persistência.
*Observe que é uma anotação opcional.* E assim, podemos reescrever nossa entidade _Course_ como:
@Entity
public class Course {
@Id
private int id;
private String name;
...
}
-
Quando não especificamos a anotação _ @ Basic_ para um atributo de tipo básico, ela é assumida implicitamente e os valores padrão dessa anotação se aplicam.
4. Por que usar a anotação _ @ Basic_?
A anotação _ @ Basic_ possui dois atributos, optional e fetch. Vamos dar uma olhada em cada um.
*O atributo _optional_ é um parâmetro _boolean_ que define se o campo ou a propriedade marcada permite _null _.* O padrão é _true_. Portanto, se o campo não for um tipo primitivo, a coluna subjacente será assumida como _nullable_ por padrão.
O atributo fetch aceita um membro da enumeração Fetch, que especifica se o campo ou a propriedade marcada deve ser carregada ou buscada com folga preguiçosamente. O padrão é FetchType.EAGER, mas podemos permitir o carregamento lento, definindo-a como _FetchType.LAZY. _
O carregamento lento apenas fará sentido quando tivermos um objeto Serializable grande mapeado como um tipo básico, pois, nesse caso, o custo de acesso ao campo pode ser significativo.
Temos um tutorial detalhado que aborda https://www..com/hibernate-lazy-eager-loading [Carregamento ansioso/preguiçoso no Hibernate] que faz um mergulho mais profundo no tópico.
Agora, digamos que não queira permitir nulls para nossos Course‘s name e queira carregar preguiçosamente essa propriedade também. Em seguida, definiremos nossa entidade Course como:
@Entity
public class Course {
@Id
private int id;
@Basic(optional = false, fetch = FetchType.LAZY)
private String name;
...
}
*Devemos usar explicitamente a anotação _ @ Basic_ quando desejar desviar dos valores padrão dos parâmetros _optional_ e _fetch_* . Podemos especificar um ou ambos os atributos, dependendo de nossas necessidades.
5. JPA _ @ Básico_ vs _ @ Coluna_
Vejamos as diferenças entre as anotações _ @ Basic_ e _ @ Column_:
-
Os atributos da anotação _ @ Basic_ são aplicados às entidades JPA, enquanto os atributos de _ @ Column_ são aplicados às colunas do banco de dados
-
O atributo optional da anotação _ @ Basic_ define se o campo da entidade pode ser nulo ou não; por outro lado, o atributo nullable da anotação _ @ Column_ especifica se a coluna do banco de dados correspondente pode ser null
-
Podemos usar _ @ Basic_ para indicar que um campo deve ser carregado lentamente
-
A anotação _ @ Column_ permite especificar o name da coluna do banco de dados mapeado
6. Conclusão
Neste artigo, aprendemos quando e como usar a anotação _ @ Basic_ da JPA. Também falamos sobre como ela difere da anotação _ @ Column_.
Como sempre, exemplos de código estão disponíveis over no Github.