Критерии не имеют результата, когда у меня есть псевдоним подкласса - PullRequest
0 голосов
/ 10 октября 2018

Я не могу создать хорошие критерии, которые дают мне правильный ответ.Вот как выглядит моя БД:

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написал вещи, которые я считал важными для этого вопроса!Есть вещи, которых здесь нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...