Ich habe eine Anwendung, die Hibernate für ihre Domänenobjekte verwendet. Ein Teil der Anwendung wird von mehreren Anwendungen gemeinsam genutzt und hat keine Kenntnis von den anderen Systemen. Um Beziehungen zu handhaben, sieht unsere Klasse wie folgt 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, je nach Art des Ereignisses. Wenn ein System über Ereignisse Bescheid wissen will, die für seine Interessen relevant sind, greift es auf alle Systemereignisse mit dem Ereignistyp "NewAccounts" oder ähnlichem zu und weiß, dass alle diese relatedObjectIds IDs für ein "User"-Objekt oder ähnliches sind.
Leider hat dies im Nachhinein zu einem Problem geführt. Ich kann keinen Weg finden, Hibernate über diese Zuordnung zu informieren, was bedeutet, dass HQL-Abfragen keine Joins durchführen können. Ich würde wirklich gerne eine HQL-Abfrage erstellen, die wie folgt aussieht:
SELECT users FROM SystemEvent event join Users newUsers where event.eventType = 'SignUp'
Hibernate weiß jedoch nichts über die Beziehung zwischen SystemEvent und Users, und soweit ich weiß, gibt es auch keine Möglichkeit, dies mitzuteilen.
Hier ist also meine Frage: Gibt es eine Möglichkeit, Hibernate über eine Beziehung zu informieren, wenn Ihre Domänenobjekte einander über ID-Nummern und nicht über Klassenreferenzen referenzieren?