2017-02-09 5 views
2

Hier ist mein many-to-many-Sammlung:Wie beibehalten viele-zu-viele Sammlung in JPA2, wenn ich nur IDs habe?

@ManyToMany 
@JoinTable(name="affiliated_databases", 
     joinColumns= 
     @JoinColumn(name="database_id", referencedColumnName="id"), 
     inverseJoinColumns= 
     @JoinColumn(name="affiliated_database_id", referencedColumnName="id") 
) 
public Set<Database> affiliatedOrgs; 

Und in meiner Dienstklasse Methode, die ich nur IDs dieser Sammlung habe. Gibt es eine gute Lösung, um diese Sammlung beizubehalten, ohne ihre Elemente aus der Datenbank zu lesen?

Ich versuche, so etwas zu tun:

for (Long affId: affIds) { 
      Database affDatabase = new Database(); 
      affDatabase.setId(affId); 
      target.getAffiliatedOrgs.add(affDatabase); 
     } 
dao.save(target); 

Es Arbeit ist, aber 1) ist es für mich sieht irgendwie nicht elegant; 2) kann es möglicherweise Fehler verursachen, wenn dieses Zielobjekt irgendwo in der Zukunft benutzt wird ... Oder ist es vielleicht eine gute Lösung und meine Zweifel sind eitel?

So gibt es elegantere Möglichkeit, diese Sammlung zu erhalten, ohne alle Objekte von DB zu lesen und in Zukunft keine Fehler zu provozieren.

Antwort

2

Sie können EntityManager.getReference() verwenden. Es erstellt ein Entity "Proxy" -Objekt mit all seinen Eigenschaften, die (wenn nötig) abgerufen werden.

Ruft eine Instanz ab, deren Status möglicherweise abgerufen wird. Wenn die angeforderte Instanz nicht in der Datenbank vorhanden ist, wird beim ersten Zugriff auf den Instanzstatus die EntityNotFoundException ausgelöst. (Die Laufzeitumgebung des Persistenzanbieters darf beim Aufruf von getReference die EntityNotFoundException auslösen.) Die Anwendung sollte nicht erwarten, dass der Instanzstatus beim Trennen verfügbar ist, es sei denn, die Anwendung hat darauf zugegriffen, während der Entity Manager geöffnet war.

Verwandte Themen