Добавить определенное отношение в аннотированном подклассе DiscriminatorValue - PullRequest
0 голосов
/ 18 октября 2019

У меня есть вопрос, я добавляю пример с целью объяснения:

У меня есть таблица с именем "A" с атрибутами:

  • id
  • typeA (дискриминация по столбцам )
  • id_entity_link

Я хочу выполнить следующие инструкции SQL:

>>> Jointure on table X with attribute id_entity_link of table A only if attribute typeA is equals to A1 : 

select * from A a
inner join X x on a.id_entity_link = x.id  and a.typeA='A1' 

>>> Jointure on table Y with attribute id_entity_link of table A only if attribute typeA is equals to A2 :  

select * from A a
inner join Y y on a.id_entity_link = y.id  and a.typeA='A2'

На самом деле, у меня есть этореализация:

    @Entity(name = "A")
    @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(
    discriminatorType = DiscriminatorType.STRING, name = "typeA")
    @Table(name = "A")
    public abstract class A {

       @Column(name = "id")
       @Id
       @GeneratedValue
       private int identifier;

       private int id_entity_link;
    }

    @DiscriminatorValue("A1")
    public class A1 extends A {

        // The jointure on table X via id_entity_link must be done only if typeA = "A1" 

        @JoinColumn(name="id_entity_link", referencedColumnName="id"))
        private X x;
    }


Как указать, что объединение между таблицами A и X доступно , только если атрибут "typeA" равен A1 ?

    @DiscriminatorValue("A2")
    public class A2 extends A {

        // The jointure on table Y via id_entity_link must be done only if typeA = "A2"

        @JoinColumn(name="id_entity_link", referencedColumnName="id"))
        private Y y;
    }

Как я могу указать, что соединение между таблицами A и Y доступно , только если атрибут "typeA" равен A2 ?

    @DiscriminatorValue("A3")
    public class A3 extends A {

        // No jointure on any table 
    }

Этот класс не имеетприсоединиться к другому классу.

Спасибо за ваш ответ

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