Предположим, что есть две сущности с отношением ManyToOne:
@Entity
public class A {
private long code;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public long getCode() {
return code;
}
public viod setCode(long code) {
this.code = code;
}
// additional setters and getters
}
@Entity
public class B {
private long code;
private A a;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public long getCode() {
return code;
}
public viod setCode(long code) {
this.code = code;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="acode", nullable=false)
public A getA() {
return a;
}
public void setA(A a) {
this.a = a
}
// additional setters and getters
}
В рамках бизнес-потока у меня есть значение кода существующего объекта A, и мне нужно вставить новый объект B и связать его с существующимA. Этот код работает нормально:
// inject em
A a = em.find(A.class, code);
B b = new B();
b.setA(a);
em.persist(b);
Моя проблема связана со строкой "A a = em.find (A.class, code)".Для меня это выглядит как избыточный запрос, потому что таблица B содержит внешний ключ (acode).Чтобы улучшить производительность, я попытался создать объект с существующим значением кода:
A a = new A();
a.setCode(code);
B b = new B();
b.setA(a);
em.persist(b);
, но он не работает.Есть ли способ избежать ненужного запроса?