我是 Spring Boot 的 JPA 概念的新手,所以在決定如何只匯入ID另一個物體的時候需要你的幫助,比如User匯入HealthData物體。以下是我的User物體:
@Entity
@Table(name = "user",uniqueConstraints = {@UniqueConstraint(columnNames = "email")})
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Email
@Column(nullable = false)
private String email;
private String imageUrl;
@Column(nullable = false)
private Boolean emailVerified=false;
@JsonIgnore
private String password;
@NonNull
@Enumerated(EnumType.STRING)
private AuthProvider authProvider;
private String providerId;
}
我希望以HealthData下列方式定義物體:
@Entity
@Table(name = "HealthData",uniqueConstraints = {@UniqueConstraint(columnNames = "id")})
public class HealthData {
@Id
private Long id; //how to import id of User here?
@Column
private Double height;
@Column
private Double weight;
@Column
private int age;
...other columns
}
現在,我希望使用Id這個User物體(一種建立父子關系)。我不想User在 HealthData 中添加類物件。我想過使用@OneToOneinHealthData但后來它會添加User它。我怎樣才能在子表中包含父表中的 ID?
uj5u.com熱心網友回復:
在這種情況下,您的 HealthData 具有對 User 的參考,我不確定您為什么不將其映射為外鍵。如果您能夠這樣做,我建議您執行以下操作:
@Entity
@Table(name = "HealthData")
public class HealthData {
@Id
@OneToOne
@JoinColumn(name = "id")
private User user;
@Column
private Double height;
@Column
private Double weight;
@Column
private int age;
...other columns
}
然后,JPA 為您處理將“ID”設定為您的用戶實體中的值,并且可以自動將兩者保留在同一事務中。允許將參考標記為 ID 被稱為派生 ID,并且我相信自 JPA 2.0 以來就受支持。
至于效率,您仍然可以延遲獲取甚至不獲取用戶實體。使用稍微不同的方法將 ID 列映射為基本列很簡單:
@Entity
@Table(name = "HealthData")
public class HealthData {
@Id
private Long id;
@MapsId
@OneToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "id")
private User user;
@Column
private Double height;
@Column
private Double weight;
@Column
private int age;
...other columns
}
當您設定 healthData.user 參考時,JPA 將根據它為用戶 ID 序列生成的內容來設定用戶 ID 和 healthData.id 值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/473261.html
