【问题标题】:Remove join entities from proxy object on demand JPA按需从代理对象中删除连接实体 JPA
【发布时间】:2016-02-08 04:45:22
【问题描述】:

我有一个类实体,其中包含其他类实体以获取连接结果。我应该按需从代理对象中删除不需要的连接吗?

@Entity
@Table(name = "JOBS")
public class job implements Serializable{

    @Column(name = "id", nullable = true)
    private int id ;

    private String              deliveryConfigXML;

    private String              djobConfigXML;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "date")
    private Date Date;

    @OneToMany(mappedBy = "processedjob")
    private List<Processedjob>  processedjobs;


    @OneToMany(mappedBy = "deliveredjob")
    private List<Deliveredjob>  deliveredjobs;
}

当我从数据库中获取这个实体时,它会给出代理对象。然后,通过使用该代理对象,我可以通过延迟加载获取其他实体。

List<DeliveredJob> list = jobs.getDeliveredJobs(); //lazy loading

由于整个响应是通过 Java Jackson 库进行的,在某些情况下,我不想要这些交付的作业和已处理的作业,但由于 Jackson,它给出了完整的结果。

我应该如何按需获得结果?如果我在代理对象中将交付的作业设置为空怎么办?如果这是一种方法,它会是解决这个问题的好方法还是有其他解决方案?

【问题讨论】:

  • 您不应该研究一下配置转换库以跳过不需要的字段/属性的方法吗?或者,您可以通过使用新的 Entity 类或构造函数查询来构建它,从而查询只有您感兴趣的数据的实体/对象。

标签: hibernate jpa proxy jackson lazy-loading


【解决方案1】:

您可以尝试取消代理该对象。

if (entity instanceof HibernateProxy) {
    entity = ((HibernateProxy) entity).getHibernateLazyInitializer()
            .getImplementation();
}

【讨论】:

  • 这是 Hibernate 特定的,如果 jpa 实现发生变化怎么办?我也必须改变这个类。
  • 我不知道这方面的 JPA API。对我来说,JPA 只是声明。一切都取决于实施。猜猜如果您更改 JPA 实现,您也需要更改类。
猜你喜欢
  • 2020-09-17
  • 1970-01-01
  • 2018-07-03
  • 2020-06-06
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 2020-12-16
相关资源
最近更新 更多