Qual é a diferença entre usar a @OneToManye @ElementCollectionanotação, pois ambos funcionam no relacionamento um para muitos?
Qual é a diferença entre usar a @OneToManye @ElementCollectionanotação, pois ambos funcionam no relacionamento um para muitos?
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.
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.
@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:
@OneToMany
private Collection<StringWrapper> strings;
//...
public class StringWrapper {
@Id
private int id;
private String string;
}
Com o JPA 2.0, você pode simplesmente escrever:
@ElementCollection
private Collection<String> strings;
Mais simples, não é? Observe que você ainda pode controlar os nomes de tabela e coluna usando a @CollectionTableanotação.
Básico ou incorporado : @ElementCollection
Entidades : @OneToMany ou @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany:
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.