我正在开发spring + Hibernate项目。两个实体Category和Product之间存在一对多的关系,我为产品实体做了restfull webservices,它是类别的子类,并且使用fetch.Eager它与父记录重复给出一条记录但是我想只得到产品记录,我不知道如何实现这一目标。
我的实体类是产品类
@Entity
public class product {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String code;
private String name;
private String brand;
private String description;
private Double unitPrice;
private Integer quantity;
private Integer purchases;
@Column(name="is_active")
private boolean active;
private Integer view;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="category_id")
private category category1;
@ManyToOne
@JoinColumn(name="supplier_id")
private User user1;
public product() {
this.code="PRD"+UUID.randomUUID().toString().substring(25).toUpperCase();
}
}
分类
@Entity
public class category {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
private String description;
@Column(name="image_url")
private String imageUrl;
private boolean active=true;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,mappedBy="category1")
private List<product> products;
}
结果是
[{“id”:1,“code”:“PRDABC123DEFX”,“name”:“iphone.5s”,“品牌”:“Apple”,“description”:“这是最优质的手机”,“unitPrice” :10.0, “量”:2 “购物”:0, “活性”:真, “查看”:2 “类别1”:{ “ID”:2 “名称为”: “移动设备”, “说明”: “这是Mobile的描述”,“imageUrl”:“CAT_1.png”,“active”:true,“products”:[{“id”:1,“code”:“PRDABC123DEFX”,“name”:“iphone” .5s“,”品牌“:”Apple“,”description“:”这是最优质的手机“,”unitPrice“:10.0,”数量“:2,”购买“:0,”有效“:真实,” view“:2,”category1“:{”id“:2,”name“:”Mobile“,”description“:”这是Mobile的描述“,”imageUrl“:”CAT_1.png“,”active“: true,“products”:[{“id”:1,“code”:“PRDABC123DEFX”,“name”:“iphone.5s”,“brand”:“Apple”,“description”:“这是最好的品质移动 “ ”单价“:10.0, ”量“:2 ”购物“:0, ”活性“:真, ”查看“:2 ”类别1“:{ ”ID“:2 ”名称为“:” 移动“,”description“:”这是Mobile“,”imageUrl“:”CAT_1.png“,”active“:true,”products“:[{”id“:1,”code“:”PRDABC123DEFX“, “名”: “iphone.5s”, “品牌”:“A pple“,”描述“:”这是质量最好的手机“,”unitPrice“:10.0,”数量“:2,”购买“:0,”有效“:真实,”查看“:2,”类别1“: {“id”:2,“name”:“Mobile”,“description”:“这是Mobile的描述”,“imageUrl”:“CAT_1.png”,“active”:true,“products”:[{“ id“:1,”code“:”PRDABC123DEFX“,”name“:”iphone.5s“,”品牌“:”Apple“,”description“:”这是最优质的手机“,”unitPrice“:10.0, “quantity”:2,“purchase”:0,“active”:true,“view”:2,“category1”:{“id”:2,“name”:“Mobile”,“description”:“这是“Mobile”的描述,“imageUrl”:“CAT_1.png”,“active”:true,“products”:[{“id”:1,“code”:“PRDABC123DEFX”,“name”:“iphone.5s” ,“品牌”:“Apple”,“描述”:“这是最优质的手机”,“unitPrice”:10.0,“数量”:2,“购买”:0,“有效”:真实,“查看”: 2,“category1”:{“id”:2,“name”:“Mobile”,“description”:“这是Mobile的描述”,“imageUrl”:“CAT_1.png”,“active”:true,“产品“:[{”id“:1,”代码“:”PRDABC123DEFX“,”名称“:”iphone.5s“,”品牌“:”Apple“,”描述“:”这是最优质的手机“, “unitPr冰 “:10.0,” 量 “:2”,购物 “:0,” 活性 “:真,” 查看 “:2”,类别1 “:{” ID “:2”,名称为 “:” 移动设备 “” 说明“:”这是Mobile“,”imageUrl“:”CAT_1.png“,”active“:true,”products“:[{”id“:1,”code“:”PRDABC123DEFX“,”name“: “iphone.5s”,“品牌”:“Apple”,“描述”:“这是最优质的手机”,“unitPrice”:10.0,“数量”:2,“购买”:0,“有效”:真实,“view”:2,“category1”:{“id”:2,“name”:“Mobile”,“description”:“这是Mobile的描述”,“imageUrl”:“CAT_1.png”,“有效“:true,”products“:[{”id“:1,”code“:”PRDABC123DEFX“,”name“:”iphone.5s“,”brand“:”Apple“,”description“:”这是最优质的手机“,”unitPrice“:10.0,”数量“:2,”购买“:0,”有效“:真实,”查看“:2,”类别1“:{”id“:2,”名称“: “Mobile”,“description”:“这是Mobile的描述”,“imageUrl”:“CAT_1.png”,“active”:true,“products”:[{“id”:1,“code”:“PRDABC123DEFX “,”“名称”:“iphone.5s”,“品牌”:“Apple”,“描述”:“这是最优质的手机”,“unitPrice”:10.0,“数量”:2,“购买”:0 , “活性”:真, “查看”:2“, category1“:{”id“:2,”name“:”Mobile“,”description“:”这是Mobile的描述“,”imageUrl“:”CAT_1.png“,”active“:true,”products“: [{“id”:1,“code”:“PRDABC123DEFX”,“name”:“iphone.5s”,“品牌”:“Apple”,“description”:“这是最优质的手机”,“unitPrice” :10.0, “量”:2 “购物”:0, “活性”:真, “查看”:2 “类别1”:{ “ID”:2 “名称为”: “移动设备”, “说明”}
这是描述
但我只想要产品表记录
JsonController类是
@Controller
public class JsonController {
@Autowired
private productDao productDao;
@RequestMapping(value="/json")
@ResponseBody
public List<product> getAllProducts(){
return productDao.getAllProduct();
}
}
您应该在category1
类中使用JsonIgnoreProperties批注忽略Product
字段以进行序列化:
@Entity
@JsonIgnoreProperties({"category1"})
public class product {
//...
}
注意:类名应该(通过convention)以大写字母开头。