Ich habe diese Wesen, es ist nicht vom wirklichen Code, aber es ist nicht wichtig, denke ich.Get einzelnes Element von JPA verschachtelte OneToMany Beziehung
@Entity
public class Country{
private String name;
//other fields with getters and setters
@OneToMany
private List<City> cites;
}
@Entity
public class City {
private String name;
//other fields with getters and setters
@OneToMany
private List<Employee> emps;//list size could be millions
}
@Entity
public class Employee {
private String name;
//other fields with getters and setters
@OneToMany
private List<Cars> cars;// list size could be 1000
}
@Entity
public class Car {
private String name;
@ManyToOne
private Employee emp;
}
Ich mag einzelne Auto Einheit erhalten, aber mit anderen Daten als auch (Land, Stadt, Mitarbeiter) wie dieses
1 Land, in der 1-Stadt, in der 1 Empoyee, in der 1-Auto (die Id ich bei der Auswahl der Put)
Also, wenn ich JPA tun kommt von Land wie
select c from Country c
inner join c.cites ci
inner join ci.emps em
inner join ci.cars car where car.id = ?
ich alle Daten in Land erhalten (mit allen Städten).
Was soll ich tun, um 1 Land, 1 Stadt, 1 Mitarbeiter, 1 Auto zu bekommen.
Wenn dies mit einer jpa-Abfrage nicht möglich ist, schlagen Sie bitte einen anderen Weg vor.
Alle Beziehungen sind bidirektional und faul.
I tried this way.
1)select car by id. then get Id of employee from car.
2)select Employee by id - but at this point Employee data are nulls -
Ich denke, es liegt daran, dass ManyToOne von Auto zu Mitarbeitern faul ist. Was denken Sie ?
Vielen Dank. Für beide Lösungen muss ich tun. emp.setCars (Collections.sigltonlist (Auto)) city.setEmps (Collections.singletonList (emp)) country.setCiyes (Collections.singletonList (Stadt)) Ansonsten während json serializtion alle faulen Sammlungen mit Millionen bevölkert erhalten von Dateien. Auch zweite Lösung funktioniert nicht, wenn ManyToOne Lazy ist (Daten sind in diesem Fall Nullen) – user1321466
Nein, nein, tu das nicht. Durch das Ändern einer verwalteten Entität werden die Änderungen automatisch in der Datenbank übernommen. Sie möchten wirklich nicht alle Städte des Landes usw. entfernen. Und selbst wenn die Entität nicht verwaltet wird, zeigt dies einfach ein Designproblem in Ihrer App. Was Sie zu JSON serialisieren, ist kein Land mit seinen Städten. Es ist das Ergebnis einer Abfrage, die eine Teilansicht von Ländern, Städten usw. enthält. Erstellen Sie einfach eine geeignete Klasse, die die Daten enthält, die Sie wirklich serialisieren möchten und die von Ihrer REST-Ressource zurückgegeben werden. –
Danke, ich denke nach ausgewählten Entitäten werden nicht verwaltet - deshalb bekomme ich kein Update in DB. Aber ich verstehe, was du sagst. So ist es Ihrer Meinung nach falsch, Land mit einer einzelnen Stadt zurückzugeben, die einen einzelnen Angestellten enthält. usw. ... – user1321466