Hibernate использует аннотацию @Embeddable с аннотацией @DiscriminatorColumn - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть таблица sql, как показано ниже.

  id       type_communicationChannel     id_phone       id_cellphone  
+----+--------------------------------+-------------+----------------+
| 1  | "PHONE"                        | 1           | NULL           |
| 2  | "CELLPHONE"                    | NULL        | 1              |
+----+--------------------------------+-------------+----------------+

Для реализации у меня есть два решения для моделирования Java-объекта:

Первое решение использует аннотацию @AttributesOverrides:

@Entity
public class Parent {
    private @Id @GeneratedValue int id;

    @Embedded
    @AttributeOverrides({
    @AttributeOverride(name="id",column=@Column(name="id_phone")})
    private CommunicationChannel phone;

    @Embedded
    @AttributeOverrides({
    @AttributeOverride(name="id",column=@Column(name="id_cellphone")})
    private CommunicationChannel cellphone;

    private String type_communicationChannel;
}

@Embeddable
public class CommunicationChannel {
   private int id;
}

Второе решение использует аннотацию @DiscriminatorColumn:

@Entity
public class Parent {
   private @Id @GeneratedValue int id;

  @Embedded
  private CommunicationChannel communicationChannel;
}

@Embeddable
@DiscriminatorColumn(
 name="type_communicationChannel",
 discriminatorType=DiscriminatorType.STRING
)
public abstract class CommunicationChannel {}

@DiscriminatorValue("CELLPHONE")
public class CellPhone extends CommunicationChannel {
  private int id_cellphone;
}

@DiscriminatorValue("PHONE")
public class PhoneFix extends CommunicationChannel {
 private int id_phone;
}

Какое наиболее подходящее решение?

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

...