我試圖建立與Person
和Company
從基類派生一個簡單的聯繫人應用程序調用Atom
:如何複雜的層次結構和接口正確模型休眠
Atom
+-Contact
+-Person
+-Company
+-ContactPhone
+-ContactEmail
我想補充ContactPhone
和ContactEmail
到以上。 棘手的我想要做的操作是合併兩個人,並有他們相應的電子郵件和手機自動合併。比方說,我們調用這兩個人的勝者和寬鬆的,我希望做以下更新:
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);
...
}
類Person
在自己的表存儲。
@Entity
public class Person extends Contact {
...
}
類公司
存儲在自己的表。
@Entity
public class Company extends Contact {
...
}
的關鍵部分是,當我結合是ContactConnected
的ContactPhone
和ContactEmail
。
接口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 {
...
}
解決這個代碼真的太慢了嗎? – Firo
這不是關於緩慢。在某些時候,會有很多'ConnectedToContact'實體。試圖更新大量開發人員的所有關係可能會導致錯誤。特別是當新實體被納入時。我只是試圖保護自己... ;-) – rmarimon