У меня есть таблица 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;
}
Какое наиболее подходящее решение?
Спасибо за ваш ответ.