問題文を実行します。JPAで、私は連絡先のオブジェクトを取得することが期待EntityManager
火災選択クエリとしてJPAは、Hibernateは、複数の選択クエリに内部
Contact contact = entityManager.find(Contact.class, Integer.valueOf(contactId));
メソッドを実行休止状態、それの後に、それは別の選択を発射します私が欲しくない顧客オブジェクトを取得するためのクエリ。
カスタマーオブジェクトは連絡先オブジェクトの子オブジェクトです。
contact entiryには、外部キーcustomerIdがあります。
Requirment:1つのselectクエリを実行して、contactオブジェクトを取得し、それ以降は何も実行しないで、2番目のselectクエリもjoinクエリではないようにします。 接触対象:
@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;
}
}
いいえ、find()を実行するとそのクエリは実行されません。 JSONへの連絡先をシリアル化するときにはおそらくそのクエリを実行するでしょう:あなたはコンタクトの顧客をシリアル化することを避けるようジャクソンに指示しなかったので、ジャクソンはそれをシリアル化するため、Hibernateは顧客の状態をロードするためにqeryを実行する必要があります。 –
お探しのコードを追加してください –