Ich habe die folgenden zwei Felder in einer Hibernate Einheit verwaltet:Entity zwei Aufzählungen enthält, aber Hibernate multipliziert die beibehaltenen Werte
@ElementCollection(targetClass = PersonAttributes.class, fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "PERSON_ATTRIBUTES", joinColumns = { @JoinColumn(name = "PERSON_ID") })
@Column(name = "ATTRIBUTES")
private List<PersonAttributes> attributes;
@ElementCollection(targetClass = PersonRoles.class, fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "PERSON_ROLES", joinColumns = { @JoinColumn(name = "PERSON_ID") })
@Column(name = "ROLES")
private List<PersonRoles> roles;
Wenn ich wählen zwei PersonAttributes
Werte und zwei PersonRoles
Werte und bleiben die Einheit, auf das Lesen Aus der Datenbank werden die Werte multipliziert.
Beispiel:
Persisting roles = [ADMIN, SUPERVISOR]
und Attribute = [ATTRIBUTE1, ATTRIBUTE2]
. Beim Lesen der Entität aus der Datenbank bekomme ich Rollen = [ADMIN, SUPERVISOR, ADMIN, SUPERVISOR]
und Attribute = [ATTRIBUTE1, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE2]
.
Ein weiteres Beispiel:
Persisting roles = [ADMIN]
und Attribute = [ATTRIBUTE1, ATTRIBUTE2]
. Beim Lesen der Entität aus der Datenbank bekomme ich Rollen = [ADMIN, ADMIN]
und Attribute = [ATTRIBUTE1, ATTRIBUTE2]
.
Sieht da ist ein unerwarteter Beitritt? Wie kann ich Hibernate die persistierten Enumerationen ohne diese Kreuz-Multiplikation lesen? Weitere Informationen: Dies tritt auf, wenn ich die entityManager.find()
Methode verwende. Aber wenn ich alle Entitäten als Liste über JPQL SELECT-Anweisung bekomme, sind die Enumerationen angemessen.
also schauen, was persistent ist und die SQL aufgerufen, um es zu erhalten, und dann schauen Sie sich die SQL aufgerufen, um die Felder abzurufen. –