我在hibernate中有两个pojo
类one-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
这样做?
答案 0 :(得分:1)
在服务层或Web服务层(如果这是一个Web项目)创建除@Entity
以外的两个不同的类作为DTO(数据传输对象),这有助于从一个层到另一个层的数据传输。
public class CustomerAccountEnduserOrderDetailsPojo {
private List<CustomerCmsProductPojo> productPojoList = new ArrayList<> ();
// getter and setter
}
public class CustomerCmsProductPojo {}
按照以下步骤
@Entity
类数据。 这样,我们可以避免更改自定义hibernate行为,因为它与许多参数(如缓存,每次迭代触发的一对多查询)相关联。
此外,在此图层中进行所需的任何自定义。希望这是一个多层项目,你有不同的层,服务于不同的目的。