Вопрос, касающийся полиморфизма гибернации и расширения родительского класса (который я могу не изменять напрямую).Мой родительский класс называется Contact :
@Entity
@Table(name="contact")
@Inheritance(strategy=InheritanceType.JOINED)
public class Contact {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
public long id;
public String name;
}
А дочерний класс называется ContactLocation , который связывает Местоположение с Контакт :
@Entity
@Table(name="contact_location")
@Inheritance(strategy=InheritanceType.JOINED)
public class ContactLocation extends Contact {
@ManyToOne(targetEntity=Location.class, cascade=CascadeType.ALL)
Location location;
}
Полученная структура таблицы базы данных выглядит правильно:
contact:
id:long
name:varchar
contact_location:
contact_id:long
location_id:long
Вот мой метод сохранения, который мне нужно либо обновить существующий ContactLocation или сохраните новый ContactLocation для существующего Contact :
public void saveContact(Object dialog) {
Contact contact = ui.getAttachedObject(dialog, Contact.class);
ContactLocation contactLocation = null;
if (contact instanceof ContactLocation) {
LOG.debug("Casting Contact to ContactLocation");
contactLocation = (ContactLocation)contact;
//TODO Update existing ContactLocation
//UPDATE contact_location SET location_id = 33 WHERE contact_id = 22;
}
else {
LOG.debug("Contact NOT instanceof ContactLocation");
//TODO Save new ContactLocation from existing Contact
//INSERT INTO contact_location (contact_id, location_id) VALUES (22,33);
}
}
Как создать строку в таблице contact_location , котораясопоставляет контакт с местоположением с использованием моего ContactLocationDao ?