Ich habe eine Anwendung, die Hibernate für ihre Domänenobjekte verwendet. Ein Teil der App ist bei einigen Apps gemeinsam und hat keine Kenntnisse über die anderen Systeme. Um Beziehungen zu handhaben, sieht unsere Klasse so aus:
@Entity
public class SystemEvent {
@Id @GeneratedValue
public int entity_id;
@Column(name="event_type")
public String eventType;
@Column(name="related_id")
public int relatedObjectId;
}
relatedObjectId
enthält einen Fremdschlüssel zu einem von mehreren verschiedenen Objekten, abhängig vom Typ des Ereignisses. Wenn ein System über Ereignisse informiert werden möchte, die für seine Interessen relevant sind, holt es sich alle Systemereignisse mit dem Ereignistyp "Neue Konten" oder etwas Ähnlichem und weiß, dass all diese relatedObjectIds IDs zu einem "Benutzer" oder Ähnlichem sind.
Leider hat dies ein Problem verursacht. Ich kann keinen Weg finden, um Hibernate über dieses Mapping zu informieren, was bedeutet, dass HQL-Abfragen keine Joins durchführen können. Ich würde wirklich gerne eine HQL-Abfrage erstellen, die so aussieht:
SELECT Benutzer FROM SystemEvent Ereignis join Benutzer neueBenutzer where Ereignis.eventType = 'Anmelden'
Allerdings hat Hibernate keine Kenntnis über die Beziehung zwischen SystemEvent und Benutzern, und soweit ich das beurteilen kann, gibt es keine Möglichkeit, es ihm mitzuteilen.
Also hier ist meine Frage: Gibt es einen Weg, Hibernate über eine Beziehung zu informieren, wenn Ihre Domänenobjekte sich über ID-Nummern und nicht über Klassenreferenzen referenzieren?