OpenJPA相对于其它java的ORM框架来说,最大的特点就是支持远程操作,这对于c/s来说至为重要。
在server端,当时图方便,Entity内容如下
@Entity
@Table
public class Test{
@Id
....
public Long ID;
@OneToMany
@ElementJoinColumn(name="testID")
public List<Child> Children;
....
}调用数据
public Test findTest(Long ID){
OpenJPAEntityManager em =getIt();//
return em.find(Test.class,ID);
}那么这时候返回的数据里面Children是空的,也就是没有加载任何关联。我们按照官网的User Guide 一步一步排除,结果是Entity类的写法不同导致的,具体上应该是OpenJPA在反射类型时,并没有判断属性/字段不管是否公有,都会查找getter和setter(这个不确定,没有深究),而且这种情况在Jaxb貌似也存在,那么我们把所有字段都封装。Entity定义如下:
@Entity
@Table
public class Test {
private Long id;
private List<Child> children;
public void setId(Long id){
this.id= id;
}
public void setChildren(List<Child> children){
this.children = children;
}
@Id
....
public Long getId(){
return this.id;
}
@OneToMany(...)
@ElementJoinColumn(...)//
public List<Child> getChildren(){
return this.children;
}
}
本文探讨了使用OpenJPA进行实体关联加载时遇到的问题及解决方案,详细介绍了如何通过正确封装getter和setter来确保子表数据能被成功加载。
5854

被折叠的 条评论
为什么被折叠?



