【发布时间】:2011-07-25 23:49:45
【问题描述】:
假设有两个具有多对一关系的实体:
@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);
但它不起作用。 有什么办法可以避免不必要的查询?
【问题讨论】:
标签: hibernate jpa jpa-2.0 hibernate-mapping