Ein Java-Webprojekt, das Hibernate verwendet, fiel mir einfach in den Schoß. Der ursprüngliche Architekt ist gegangen und ich habe fast keine Erfahrung mit der JPA Criteria API. Bitte vergib mir meine Unwissenheit. Ich suche nach Hilfe beim Schreiben mehrerer Joins mit der JPA Criteria API.Benötigen Sie Hilfe beim Erlernen, wie Sie mit jpa an zwei separaten Entitäten teilnehmen können
Ich habe die folgenden Entitäten und Beziehungen. Ein ElectronicDevice enthält eine Reihe von Komponenten, die eine Reihe von Signalen enthalten.
Ich versuche, eine Abfrage zu schreiben, die alle Komponenten und die Signale eines bestimmten elektronischen Geräts zurückgibt.
Ich kann das ElectronicDevice mit der Komponente bekommen, aber ich kann die Signale nicht bekommen. Ich habe folgende Abfrage geschrieben.
EntityManager em = getEm();
String electronicDeviceId="Some UUID";
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(Component_.class);
Root<ElectronicDevice> i = cq.from(ElectronicDevice.class);
SetJoin<ElectronicDevice, Component> join = i.join(ElectronicDevice_.components);
cq.where(cb.equal(i.get(ElectronicDevice_.id), electronicDeviceId));
cq.multiselect(join);
TypedQuery q = em.createQuery(cq);
List<Component> resultList = q.getResultList();
Meine Entity Definitionen werden als
@Entity
public class ElectronicDevice implements Serializable {
@Id
@Column(length = 36)
private String id;
@XmlElement
@OneToMany
private Set<Component> components = new HashSet<Component>();
}
@Entity
public class Component extends ParametricObject implements Serializable{
@XmlElement
@OneToMany
private Set<Signal> signals = new HashSet<Signal>();
public Set<Signal> getComponents() {
return signals;
}
}
@Entity
public class Signal implements Serializable {
@Id
@Column(length = 36)
private String id;
}
public class ParametricObject {
@EmbeddedId
@XmlElement
private ParametricId id;
@XmlElement
private String name;
public ParametricId getId() {
return id;
}
public void setId(ParametricId id) {
this.id = id;
}
}
folgt
public class ParametricId {
@XmlElement
@ManyToOne
@XmlIDREF
private ElectronicDevice ed;
@XmlAttribute
@XmlID
@Column(length = 36)
private String internalId;
public ElectronicDevice getEd() {
return ed;
}
public void setEd(ElectronicDevice ed) {
this.ed = ed;
}
public String getInternalId() {
return internalId;
}
public void setInternalId(String internalId) {
this.internalId = internalId;
}
}
Vielleicht ist Ihre Antwort, die ich bin nicht ganz verstehen. Dies scheint jedoch nicht die JPA-Kriterien-API zu verwenden. Ist dieser Code spezifisch für Hibernate? –
ja dies ist spezifisch für überwintern –