使用JPA Java實現總是取決於您自己的偏好和要求,有時候這是一個選擇的問題。
是的,@MappedSuperclass會做。 您可以讓每個孩子都與網站建立單向關係。然後你會在你的User類中有一個Website對象(帶有一堆註釋),它將映射到一個數據庫作爲foreign_key字段(假設你正在使用SQL存儲和'JPA的'Repositories'DAO抽象)。
沒有必要在網站類中存儲一組用戶。想想如果你真的需要它 - 支持一致性可能是一團糟。 但有些情況下您需要雙向關係。當你將對象存儲在內存中時(例如爲了緩存目的),你可能需要擁有這個集合。在這種情況下,爲什麼不有'用戶'集合?您將通過專用存儲庫獲取數據(或者即使您沒有使用這些存儲庫,任何其他方式都將使用帶有foreign_key的'用戶'表格,而不是'網站'表格)。
因此,例如使用Spring Data JPA,您可以在超類中定義單向關係,並使用下一個「存儲庫」(以及雙向示例,您可以在互聯網中的任何地方找到,所以我不提供它) :
@Entity
public class SuperUser extends User {
...
}
@Entity
public class BasicUser extends User {
...
}
@MappedSuperclass
public abstract class User implements Serializable {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "website_uuid", nullable = false)
protected Website website;
...
}
@Entity
public class Website implements Serializable {
...
}
@Repository
public interface SuperUserRepository extends CrudRepository<SuperUser, Long> {
Iterable<SuperUser> findByWebsite(Website website);
}
@Repository
public interface BasicUserRepository extends CrudRepository<BasicUser, Long> {
Iterable<BasicUser> findByWebsite(Website website);
}
'每個子類都有自己的表,超類用戶,同時,不會。「要小心這一點,超類中的所有這些常見字段可能會在每個子類表中重複出現,這可能會導致不一致以及重複。考慮重新思考方法,併爲超類設置表格,然後爲更具體的擴展數據添加附加表格 – Jimmy
@Jimmy我的想法籠罩於普通領域,並不是太多。無論如何,我counclnt改變結構,因爲它是一個現有的數據庫。什麼是你最好的解決方案?謝謝 ! –