我对JPA 1.0(OpenJPA)有问题
跟随情况
@Entity
public class A{
private Long aId;
private List<B> bEntities;
//myId getter and setter
@OneToMany(mappedBy="referencedA")
public List<B> getBEntities(){
return bEntities;
}
public void setBEntities(List<B> bEntities){
this.bEntities = bEntities;
}
}
,
@Entitiy
public class B{
private Long bId;
private Long aId;
private A referencedA;
//aId/bId getter and setter
@ManyToOne
@JoinColumn(name="A_ID", referencedColumnName="A_ID")
public A getReferencedA(){
return referencedA;
}
public void setReferencedA(A referencedA){
this.referencedA = referencedA;
}
}
如果我执行以下JPQL查询,它将按预期工作,这意味着每个属性都已填充:
select object(o) from B o
但是,如果我想获得全部作为:
select object(o) from A o
我尝试通过aReceivedAObject.getBEntities();获得B列表。它返回null。
如果我如下更改或扩展OneToMany批注:
@OneToMany(mappedBy="referencedA", fetch=FetchType.EAGER)
一切都按预期进行。
但是我需要延迟获取,因为其他所有东西都太慢了。
我真的希望有人可以帮助我解决问题,因为我已经坚持了三天了:(
注意,如果它很重要:
我(必须)使用Websphere 6.1(带有EJB 3.0的Feature-Pack),后者使用OpenJPA 1.0。这是一个JavaEE项目。
据我了解我需要启用增强功能的OpenJPA-Doc所描述的,我已经完成了此处的操作http://www.ibm.com/developerworks/websphere/techjournal/0612_barcia/0612_barcia.html#sec4f
但这似乎没有什么区别:(
提前致谢!!!
亲切的问候,
asotbb
// edit:更正的错字:将“ public list getBEntities()”更改为“ public List getBEntities()”
最佳答案
从另一堂课我称之为ADAL的
findAll方法。
是的,这是您的问题,如果它不是持久性感知的,那么如果您希望ReceivedAObject.getBEntities()与延迟加载一起使用,则需要使该类了解持久性上下文。
持久性扩展到处都是,但会变得混乱,因为您可能被迫手动在它们之间合并实体。您可以执行的另一种方法是将getBEntities()
方法包装在数据访问层(ADAL)中。