[英]Hibernate: Saving a complex data model in Spring
我的數據模型有一個實體網絡。 一組相互引用與實體@OneToOne
, @ManyToOne
等。一些這些參考文獻的定義為@NotNull
@Entity
@Table(name="UserDetails")
public class CustomUserDetails implements Serializable {
@NotNull
@JoinColumn(name="user_id", referencedColumnName="id")
@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private User user;
//.....
}
CustomUserDetailsService
處理從數據庫保存和加載CustomUserDetails
類的實例,而UserDetailsRepository
是擴展CrudRepisitory
的接口。
當用戶調用/signup
我們要創建CustomUserDetails
實例並將其保存到數據庫。 但是在服務器持久CustomUserDetails
的新實例CustomUserDetails
,它必須創建User
類型的新實例並將其保存到db(定義為@NotNull
)。
在Controller的CustomUserDetailsService
執行此操作是否有意義? 還是其他地方?
恐怕設計會變得太復雜,並且當數據模型變得更復雜時,不同實體的服務類之間會有很多交叉引用。
遵循相同的樣式,您應該具有一個名為“ UserService”的類,該類為用戶處理CRUD操作。 類CustomUserDetailsService應該包含一個UserService成員,最好使用@Autowire注釋。
在創建新的自定義用戶詳細信息之前,請調用UserService來創建新用戶(如果需要)。
從原則上講 ,它可以在這里結束, CustomUserDetailsService熟悉UserService ,反之亦然。 您已經定義了cascade = CascadeType.ALL ,因此,如果刪除用戶,則還將刪除客戶用戶詳細信息。
只需確保CustomUserDetails的其他關系具有正確定義的級聯即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.