[英]JPA hibernate executes multiple select query internally
問題陳述:在JPA休眠狀態下,我執行一個方法
Contact contact = entityManager.find(Contact.class, Integer.valueOf(contactId));
不出所料, EntityManager
觸發一個選擇查詢以獲取聯系人對象,但是此后,它觸發另一個選擇查詢以獲取我不想要的客戶對象。
客戶對象是聯系對象中的子對象。
contact entiry有一個外鍵customerId。
要求:我希望EntityManager觸發一個選擇查詢以獲取聯系人對象,然后再執行第二次選擇查詢或聯接查詢。 接觸對象:
@Entity
@Table(name = "contact")
public class Contact {
@JsonProperty("contactId")
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "Id")
int contactId;
@Column(name = "firstname")
@JsonProperty("firstName")
String firstName;
@Column(name = "lastname")
@JsonProperty("lastName")
String lastName;
@Column(name = "phone1")
@JsonProperty("phone1")
String phone1;
@ManyToOne(optional = false, fetch = FetchType.LAZY, targetEntity = Customer.class)
@JoinColumn(name = "customer_id", updatable = false)
@Fetch(FetchMode.JOIN)
Customer customer;
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
我認為您的問題來自與延遲加載一起使用@Fetch(FetchMode.join)。 如果您不想急於加載客戶,則應刪除@Fetch(FetchMode.join)並僅使用延遲加載
在此處查看有關此的更多信息( https://stackoverflow.com/a/29667050/2637940 ):
首先,@Fetch(FetchMode.JOIN)和@ManyToOne(fetch = FetchType.LAZY)是對立的,一個指示EAGER的獲取,而另一個則指示LAZY的獲取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.