簡體   English   中英

JPA休眠在內部執行多個選擇查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM