Em poucas palavras, @ElementCollection é usado quando a existência da entidade-criança não tem sentido sem a entidade pai, IOW, sempre que uma entidade pai é removido, seus filhos vão também ser ...
dellasavia
1
Acredito que NÃO é a Entidade filha, é o Tipo de Valor / Objeto de Valor que está incorporado e cuja existência tem um significado menor sem a Entidade principal na qual está contida.
CuriousMind
concorde com @CuriousMind, na JPA, uma 'Entidade' tem seu próprio ciclo de vida.
mhrsalehi 25/01
Respostas:
124
Eu acredito que @ElementCollectioné principalmente para mapear não-entidades (incorporáveis ou básicas) enquanto @OneToManyé usado para mapear entidades. Então, qual usar depende do que você deseja alcançar.
Obrigado Peder pela resposta! Você tem um ponto válido, pois o @OneToMany pode relacionar apenas entidades.
n_g 23/01
157
ElementCollectioné uma anotação JPA padrão, que agora é preferida à anotação proprietária do Hibernate CollectionOfElements.
Isso significa que a coleção não é uma coleção de entidades, mas uma coleção de tipos simples (Strings, etc.) ou uma coleção de elementos incorporáveis (classe anotada com @Embeddable).
Isso também significa que os elementos pertencem completamente às entidades que os contêm: eles são modificados quando a entidade é modificada, excluídos quando a entidade é excluída etc. Eles não podem ter seu próprio ciclo de vida.
... e você não pode consultá-los por conta própria.
Preso
66
@ElementCollectionpermite simplificar o código quando você deseja implementar o relacionamento um para muitos com o tipo simples ou incorporado. Por exemplo, no JPA 1.0, quando você queria ter um relacionamento de um para muitos com uma lista de Strings, era necessário criar uma entidade simples POJO ( StringWrapper) contendo apenas a chave primária e a Stringquestão:
Então, qual é exatamente o objetivo do @ElementCollection?
n_g 23/01
0
ElementCollection pode substituir os mapeamentos ou tabelas para sua coleção, para que você possa fazer com que várias entidades façam referência à mesma classe Embeddable, mas cada uma armazene seus objetos dependentes em uma tabela separada.
Respostas:
Eu acredito que
@ElementCollection
é principalmente para mapear não-entidades (incorporáveis ou básicas) enquanto@OneToMany
é usado para mapear entidades. Então, qual usar depende do que você deseja alcançar.fonte
ElementCollection
é uma anotação JPA padrão, que agora é preferida à anotação proprietária do HibernateCollectionOfElements
.Isso significa que a coleção não é uma coleção de entidades, mas uma coleção de tipos simples (Strings, etc.) ou uma coleção de elementos incorporáveis (classe anotada com
@Embeddable
).Isso também significa que os elementos pertencem completamente às entidades que os contêm: eles são modificados quando a entidade é modificada, excluídos quando a entidade é excluída etc. Eles não podem ter seu próprio ciclo de vida.
fonte
@ElementCollection
permite simplificar o código quando você deseja implementar o relacionamento um para muitos com o tipo simples ou incorporado. Por exemplo, no JPA 1.0, quando você queria ter um relacionamento de um para muitos com uma lista deString
s, era necessário criar uma entidade simples POJO (StringWrapper
) contendo apenas a chave primária e aString
questão:Com o JPA 2.0, você pode simplesmente escrever:
Mais simples, não é? Observe que você ainda pode controlar os nomes de tabela e coluna usando a
@CollectionTable
anotação.Veja também:
fonte
Básico ou incorporado : @ElementCollection
Entidades : @OneToMany ou @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany:
fonte
@ElementCollection
marca uma coleção. Isso não significa necessariamente que esta coleção faça referência a uma junção 1-n.fonte
ElementCollection pode substituir os mapeamentos ou tabelas para sua coleção, para que você possa fazer com que várias entidades façam referência à mesma classe Embeddable, mas cada uma armazene seus objetos dependentes em uma tabela separada.
fonte