das folgende ModellJPA: Wie eifrig ein eingebettetes Element Sammlung holen
@Entity
// JPA and JAXB annotations here
public class Employee implements Serializable {
// other fields, annotations, stuffs
...
@ElementCollection(fetch = FetchType.LAZY,
targetClass = Address.class)
@CollectionTable(name = "employee_address",
schema = "hris",
joinColumns = @JoinColumn(name = "employee_id",
nullable = false,
referencedColumnName = "employee_id",
foreignKey = @ForeignKey(ConstraintMode.CONSTRAINT)))
protected Set<Address> addresses;
// setters, getters
...
}
@Embeddable
// JAXB annotations here
public class Address implements Serializable {
// fields, setters, getters
}
Die Address
Klasse kommentierte mit @Embeddable
Annotation und die Employee
Klasse hat ein eingebettetes Element Sammlung von addresses
Betrachten. Die Elementsammlung fetch
ist auf FetchType.LAZY
festgelegt. Jetzt möchte ich ein @NamedQuery
erstellen, das alle Mitarbeiter mit Adressen abrufen würde, die eifrig initialisiert wurden. Wenn ich wüsste, dass JOIN FETCH
will only work with entity collections mit @OneToMany
oder @ManyToMany
basierend auf JPA 2.1 kommentiert wird, wie würde ich eine gültige JPQL
Abfrage erstellen, die es mir erlauben würde, eingebettete Element-Sammlungen abzurufen?
Wie sind Sie zu dem Schluss gekommen, dass "Join Fetch" nur mit Entitäten funktioniert? Hast du es versucht? –
@DraganBozanovic: Basierend auf der Dokumentation "Die von der rechten Seite der FETCH JOIN-Klausel referenzierte Zuordnung muss eine Verknüpfung sein, die zu einer Entität gehört, die als Ergebnis der Abfrage zurückgegeben wird. Es ist nicht zulässig, eine anzugeben Identifizierungsvariable für die Entitäten, auf die auf der rechten Seite der FETCH JOIN-Klausel verwiesen wird, und daher können Verweise auf die implizit abgerufenen Entitäten nicht an anderer Stelle in der Abfrage erscheinen. " –
Der für die Sammlung bewertete Pfad muss in ein Verknüpfungsfeld aufgelöst werden –