Frage

Ich muss eine äußere Abfrage machen verbinden, die alle Definitionen abruft und alle Eigenschaften, die sie mit ihnen verbunden sind, die mit einem bestimmten Unternehmen zugeordnet sind.

Ich habe zwei Hibernate Modelle Objekte:

class PropertyDefinition {
    @Id
    private Long id;

    @Column
    private String name;

    @OneToMany(mappedBy = "propertyDefinition")
    private Set<Property> properties = new HashSet<Property>();
}

class Property {
   @Id
   private Long id;

   @ManyToOne
   private Integer companyId;

   @ManyToOne
   private PropertyDefinition propertyDefinition;
}

So ist die Abfrage beendet aussehen wie:

from PropertyDefinition as pd left join pd.properties as props with props.companyId = :companyId

Also alles peachy ist so weit. Das Problem, das ich habe, ist, welche Art von Struktur lagere ich die zurückgegebenen Daten in? Hibernate gibt eine Liste, wo [0] ist die Propertydefinition (soll nie Null sein) und [1] ist die möglicherweise null Property.

Meine Fragen:

  • Die widerwärtig und nicht sehr OO freundlich um die Liste des Object [] s zu übergeben.
  • Ich kann nicht nur halten auf die Property weil die Liste der Eigenschaften ist es hält nicht auf das Unternehmen beschränkt.
  • Ich konnte ein einfaches Objekt erstellen, die einen Verweis auf die Propertydefinition und ein möglicherweise null Eigentum aber seine ineffizient durch die gesamte Liste zu durchlaufen zu haben, hält und setzt die jeweils in diese neue Aufgabe.

Jeder habe einen Vorschlag für eine bessere Abfrage oder eine bessere Abbildungsstruktur? Ich würde wirklich jede Hilfe zu schätzen wissen.

War es hilfreich?

Lösung

Nun, normalerweise auf Sammlung kommt links am besten über holen , die eine Liste von Containerobjekten mit bevölkerten Sammlungen zurückgibt. da Sie with Zustand jedoch verwenden, das wird nicht für Sie arbeiten.

Wenn Sie eine einfache Halterung für PropertyDefinition und Property mit entsprechendem öffentlichem Konstruktor erstellen sind, könnte man sagen, dass Hibernate zurück:

select new Holder(pd, props)
  from PropertyDefinition as pd
  left join pd.properties as props
  with props.companyId = :companyId

Es sollte die Probleme kümmern Sie aufgeführt haben; es ist nicht ideal, aber wahrscheinlich ist die beste Lösung unter den gegebenen Umständen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top