Я не могу создать хорошие критерии, которые дают мне правильный ответ.Вот как выглядит моя БД:
Table A : this is a table that one column has references to Table B.
Table B : this is a table that contains two subtable b1 and b2.
Table b1: this is a table that one column has references to Table C.
Table b2: this is a table that one column has references to Table D.
Table C : this is a destination1.
Table D : this is a destination2.
Для лучшего понимания это файл A.hbm.xml:
<class name="A" table="A" schema="database">
<many-to-one name="B" column="b_id" class="package.B"/>
</class>
и файл B.hbm.xml:
<class name="B" table="B" schema="database">
<subclass name="B1" discriminator-value="b1" >
<many-to-one name="b1" column="b1_id" class="package.B1"/>
</subclass>
<subclass name="B2" discriminator-value="b2" >
<many-to-one name="b2" column="b2_id" class="package.B2"/>
</subclass>
</class>
Я хочу получить список из таблицы A, но поскольку некоторые данные в A ссылаются на b1, а некоторые на b2, crit.createAlias () вернет 0 данных.У меня также была хитрость, чтобы сделать 2 отдельных критерия и объединить результаты, но это правильный путь, и иногда это заканчивается ошибками.Это мой код
private Criteria completeCriteria(Criteria c) {
c.createAlias(A.PROP_B, "B");
// alias from first subtable
c.createAlias("B."+b1.PROP_C, "C");
System.out.println("1# : "+c.list().size)
// alias from second subtable
c.createAlias("B."+b2.PROP_D,"D");
System.out.println("2# : "+c.list().size)
....
}
, и вывод выглядит так:
1# : 10
2# : 0
Примечание 1: PROP_D - это имя столбца, на который ссылается Таблица D
Примечание 2: Iнаписал вещи, которые я считал важными для этого вопроса!Есть вещи, которых здесь нет.