OpenJPA OneSide映射 Find操作时关联数据为空的问题

本文探讨了使用OpenJPA进行实体关联加载时遇到的问题及解决方案,详细介绍了如何通过正确封装getter和setter来确保子表数据能被成功加载。

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;
    }
}


这时候再通过Find查询实体,能够返回子表数据。那么为了不必要的麻烦,以后还是老老实实封装getter和setter吧,这点java不如c#简洁!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值