在hibernate一对多关系中获取特定属性

时间:2016-09-07 11:51:51

标签: spring hibernate

我在hibernate中有两个pojoone-to-many relationship

CustomerAccountEnduserOrderDetails.class

@Entity @Table(name="customer_account_enduser_order_details") 
public class CustomerAccountEnduserOrderDetails  implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private Long id;

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "product_id", insertable = false, updatable = false)
private CustomerCmsProduct customerCmsProduct;
}

其次是 CustomerCmsProduct.class

@Entity
@Table(name="customer_cms_product")
@JsonIgnoreProperties(ignoreUnknown = true)
public class CustomerCmsProduct {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="id")
    private Long id;

    @Column(name="name")
    private String name;

    @Column(name="offer_price")
    private String offerPrice;

    @Column(name="original_price")
    private String originalPrice;

    @Column(name="discount")
    private String discount;
}

如果我获取CustomerAccountEnduserOrderDetails类的对象,那么我也会得到CustomerCmsProduct类,我的问题是这里我想要CustomerCmsProduct表的特定列(并非所有默认情况下我都得到了所有内容),只有id和originalPrice。

我如何在projection这样做?

1 个答案:

答案 0 :(得分:1)

在服务层或Web服务层(如果这是一个Web项目)创建除@Entity以外的两个不同的类作为DTO(数据传输对象),这有助于从一个层到另一个层的数据传输。

public class CustomerAccountEnduserOrderDetailsPojo {
    private List<CustomerCmsProductPojo> productPojoList = new ArrayList<> ();
    // getter and setter
}

public class CustomerCmsProductPojo {}

按照以下步骤

  • 通过从服务层执行查询来检索@Entity类数据。
  • 遍历所有字段并仅将必填字段复制到pojo图层
  • 使用服务方法将数据公开给其他图层。

这样,我们可以避免更改自定义hibernate行为,因为它与许多参数(如缓存,每次迭代触发的一对多查询)相关联。

此外,在此图层中进行所需的任何自定义。希望这是一个多层项目,你有不同的层,服务于不同的目的。