鑒于下面的模型,當myentity使用 JPA從表中獲取物體時,有沒有辦法阻止從anotherentity表中獲取物體的輔助獲取,但會為我們提供externalPk字串值(用作外鍵)本身?
雖然我明白,因為在Java中宣告型別不會特別是可能的,我不知道是否有方法來訪問,如果沒有資訊的額外獲取考慮到它是確實正確的,在該myentity表作為一個實際的varchar列。
如果有幫助,我們將使用 EclipseLink 作為我們的 JPA 提供程式。
當前型號
@Entity
@Table(name = "myentity")
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@IdClass(MyIdClass.class)
public class MyEntity {
@Id
@Column(updatable = false)
private String foo;
@Id
@Column(updatable = false)
private String bar;
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "my_foreign_key", referencedColumnName = "external_pk")
private AnotherEntity anotherEntity;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Embeddable
public class MyIdClass implements Serializable {
private String foo;
private String bar;
}
@Entity
@Table(name = "anotherentity")
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class AnotherEntity {
@Id
@Column(name = "external_pk", nullable = false, updatable = false)
private String externalPk;
@Column
private String something;
}
uj5u.com熱心網友回復:
如果 oneToOne 關系不是可選的,您可以optional = false, fetch = FetchType.LAZY像這樣附加注釋:
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "my_foreign_key", referencedColumnName = "external_pk")
private AnotherEntity anotherEntity;
然后,您將能夠在myEntity.getAnotherEntity().getKey()不加載關系的情況下訪問其密鑰。
這是一個使用休眠的 POC
uj5u.com熱心網友回復:
如果您希望能夠訪問 my_foreign_key 外鍵值而不必呼叫 MyEntity.getAnotherEntity().getId() 并執行對 anotherEntity 的完整獲取,您可能應該將其映射為 MyEntity 實體中的只讀基本映射:
public class MyEntity {
...
@Column(updatable = false)
private String bar;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "my_foreign_key", referencedColumnName = "external_pk")
private AnotherEntity anotherEntity;
@Column(name = "my_foreign_key",updatable = false, insertable=false)
private String myForeignKey;
}
作為一個額外的好處,雖然 EclipseLink 在這種型別的映射上做得很好,但它可以用于查詢以防止無意中不必要地強制表連接。但缺點是您必須自己從關系中設定此值以保持該值與關系值同步 - @MapsId 可能有效,但它適用于 ID 映射中涉及的關系,因此可能不可移植。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/355887.html
上一篇:HashMap無法識別鍵,當鍵是具有另一個物體串列的物體時
下一篇:Hibernate和PostgreSQL:REPEATABLE_READ和使用@Version注解避免寫傾斜等現象
