Cześć. Mam taki sobie taki -model encja:

@Entity
@Table(name="drink")
public class Drink {

    @ManyToOne
    @JoinColumn(name="user_id")
    private User user;

}

oraz do tego w idealnym świecie miałabym taką encję:

@Entity
@Table(name="drink_operation")
public class DrinkOperation {

    @ManyToOne
    @JoinColumn(name="user_id")
    private User user;

    @ManyToOne
    @JoinColumn(name="source_id")
    private Drink source;

    @ManyToOne
    @JoinColumn(name="destinity_id")
    private Drink destinity;

}

dalej mam metodę (której nie mogę ruszyć), która musi dostać kryteria na użytkownika o takie:
session.createCriteria("user","user");

tak to wyglądałoby w idealnym świecie, ale u mnie DrinkOperation to jest tak:

@Entity
@Table(name="drink_operation")
public class DrinkOperation {

    @ManyToOne
    @JoinColumn(name="source_id")
    private Drink source;

    @ManyToOne
    @JoinColumn(name="destinity_id")
    private Drink destinity;

}

użytkownika muszę brać albo z source albo z destinity (jedno z nich może być nullowe).

Czy da się hibernate'owymi kryteriami, nie wiem za pomocą left outer join, imitacji union'a (czyli 2x detached criteria) albo nawet sqlki
wgl. otrzymać równoważne kryteria jak z przypadku wyżej (ten z idealnego świata)?

takie session.createCriteria("source.user","user") || session.createCriteria("destinity.user","user"), ale w jednym (wyberia to co nie null).
jak to ugryźć