Я пытаюсь настроить простое приложение для контактов с Person
и Company
, полученными из базового класса с именем Atom
:
Atom
+-Contact
+-Person
+-Company
+-ContactPhone
+-ContactEmail
Я хочу добавить ContactPhone
и ContactEmail
к вышесказанному. Операция tricky , которую я хочу сделать, - объединить два человека и автоматически объединить их соответствующие электронные письма и телефоны. Допустим, мы называем этих двух человек победителем и проигравшим, я собираюсь сделать следующее обновление:
update ContactPhone CP set CP.contact_id=winnerid where CP.contact_id=looserid
update ContactEmail CE set CE.contact_id=winnerid where CE.contact_id=looserid
Более того, я бы хотел, чтобы ContactPhone
, ContactEmail
и, возможно, какой-то другой ClassConnectedToAContact
реализовали интерфейс ConnectedToContact
и сделали следующий запрос:
update ConnectedToContact CTC set CTC.contact_id=winnerid where CTC.contact_id=looserid
И это обновление должно выполняться для всех контактов, которые соответствуют критериям, и выполнять обновление. До сих пор я пришел к этой неработающей структуре. Возможно, вы можете отправить меня в правильном направлении, чтобы заставить его работать. Возможно, нужно немного подправить.
класс Атом
Предоставляет уникальный идентификатор для всех элементов базы данных. А также создание, обновление, удаление, статус для всех объектов
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Atom {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
...
}
класс Контакт
@MappedSuperclass
public abstract class Contact extends Atom {
public abstract Collection<ContactPhone> getPhones();
public abstract void setPhones(Collection<ContactPhone> phones);
public abstract Collection<ContactEmail> getEmails();
public abstract void setEmails(Collection<ContactEmail> emails);
...
}
класс персонажа
Хранится в собственной таблице.
@Entity
public class Person extends Contact {
...
}
класс Фирма
Хранится в собственной таблице.
@Entity
public class Company extends Contact {
...
}
Важнейшая часть - это когда я включаю ContactPhone
и ContactEmail
, которые ContactConnected
.
интерфейс ConnectedToContact
@MappedSuperclass
public interface ConnectedToContact {
public Contact getContact();
public void setContact(Contact contact);
}
класс ContactPhone
@Entity
public class ContactPhone extends Atom implements ConnectedToContact {
...
}
класс ContactEmail
@Entity
public class ContactEmail extends Atom implements ConnectedToContact {
...
}