Respostas:
@Basic
significa que um atributo deve ser persistido e um mapeamento padrão deve ser usado. Possui parâmetros que permitem especificar se o atributo deve ser carregado lentamente e se é anulável.
@Column
permite especificar o nome da coluna no banco de dados no qual o atributo deve ser persistido.
Se você especificar um sem o outro, obterá um comportamento padrão que é sensato; portanto, geralmente as pessoas usam apenas um, com exceção de casos especiais.
Portanto, se quisermos um carregamento lento de um atributo e especificar um nome de coluna, podemos dizer
@Basic(fetch=FetchType.LAZY)
@Column(name="WIBBLE")
Se tivéssemos o comportamento padrão não preguiçoso, apenas o @Column
teria sido suficiente.
Além da resposta de @ djna , vale a pena notar que @Basic
deve ser comparado com @OneToMany
, @ManyToOne
e @ManyToMany
. Apenas um deles pode ser especificado em qualquer propriedade.
@Column
e @JoinColumn
pode ser especificado junto com qualquer um deles para descrever as propriedades da coluna do banco de dados.
Esses são dois conjuntos de anotações que podem ser usados juntos, mas apenas uma anotação de cada conjunto pode ser usada por vez.
Vale ressaltar que o Basic foi desenvolvido para campos primitivos
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes
Um atributo básico é aquele em que a classe de atributo é um tipo simples, como String, Número, Data ou primitivo. O valor de um atributo básico pode ser mapeado diretamente para o valor da coluna no banco de dados.
Os tipos e conversões suportados dependem da implementação da JPA e da plataforma de banco de dados. Qualquer atributo básico que use um tipo que não mapeie diretamente para um tipo de banco de dados pode ser serializado para um tipo de banco de dados binário.
A maneira mais fácil de mapear um atributo básico na JPA é não fazer nada. Quaisquer atributos que não tenham outras anotações e não façam referência a outras entidades serão mapeados automaticamente como básicos e até serializados, se não um tipo básico. O nome da coluna para o atributo será padronizado, com o mesmo nome do atributo, em maiúsculas.
A anotação @Basic é aplicada às entidades JPA e a @Column é aplicada às colunas do banco de dados O atributo opcional da anotação @Basic define se o campo da entidade pode ser nulo ou não; por outro lado,
@Basic
sem@Column
, e é por isso que as propriedadesoptional
enullable
existem em ambos. Estou certo?