[英]Spring JPA - Joining non-persistent fields
我正在將Spring Boot Web與JPA一起使用,以便開發事件計划應用程序。 目前,我正在開發公共用戶配置文件功能,並且在設計該功能時需要幫助,因為我不確定加入非持久字段的最佳方法。
用戶類:
@Entity
@Table(name = "users")
public class User extends BaseEntity {
@Column(name = "name")
private String name;
@Column(name = "email", unique = true)
private String email;
@Column(name = "profile_picture")
private String profilePicture;
@Column(name = "facebook_token")
private String facebookToken;
other fields, method, and private data...
}
UserProfile類:
public class UserProfile {
private final String name;
private final String email;
private final String profilePicture;
...
}
訪客類:
@Entity
@Table(name = "guests")
public class Guest extends BaseEntity {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "event_id")
private Event event;
@Column(name = "status")
private String status;
@Column(name = "is_attending")
private boolean isAttending;
}
考慮到UserProfile
是User
類的簡化,並且是非持久性的,將UserProfile
類保留在Guest
類中的最佳方法是什么?
您不能在JPA中將非實體作為關系,因為JPA不了解UserProfile。
一種解決方案是將UserProfile作為User的基類,然后將UserProfile和具有@Inheritence的用戶映射起來。
然后,您可以在Guest和UserProfile之間保持持久關系
您可以使用Embedded類將UserProfile
保留在Guest
類中,但這將是持久性的。如果希望UserProfile
所有屬性都是非持久性的,則必須在其每個屬性上添加@Transient
。
我無法弄清為什么您將需要誠實地做到這一點。 無論如何,您都將執行以下操作,但這是一個不好的做法,因為您將DTO放置在Entity而不是相反的對象中:
@Transient UserProfile userProfile;
為什么不懶惰地與用戶加入來賓呢? 或者使用來賓和用戶從UserProfile繼承的繼承關系。
另一個選擇是簡單地使UserProfile成為只讀視圖,該視圖僅從User獲取所需的列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.