3
假设有两个实体具有多对一关系的子对象:持久性与现有父一个
@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
}
随着业务流程的一部分,我有现有的目的的代码值,我需要插入新的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,代码)” 行。这看起来像是一个冗余查询,因为B表包含一个外键(acode)。 为了提高性能,我试图创建一个对象与现有的码值:
A a = new A();
a.setCode(code);
B b = new B();
b.setA(a);
em.persist(b);
,但它不工作。 有什么办法可以避免不必要的查询吗?
谢谢,那就是我一直在寻找 – user683560 2011-03-30 11:56:00