Java和Hibernate-仅持久化子实体
我还在学习与hibernate的关系,请耐心听我说 这些是我的实体,一个购物车项目关系:Java和Hibernate-仅持久化子实体,java,hibernate,Java,Hibernate,我还在学习与hibernate的关系,请耐心听我说 这些是我的实体,一个购物车项目关系: @Entity @Table(name = "cart", schema = "myschema", catalog = "mydb") @JsonIgnoreProperties(ignoreUnknown = true) public class Cart implements Serializable { private Intege
@Entity
@Table(name = "cart", schema = "myschema", catalog = "mydb")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Cart implements Serializable {
private Integer id_cart;
private String name;
@JsonManagedReference
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private Set<Items> items;
//getters and setters...
@JsonInclude(JsonInclude.Include.NON_NULL)
@OneToMany(mappedBy = "cart", orphanRemoval = true, fetch = FetchType.LAZY,cascade = CascadeType.ALL)
public Set<Items> getItems() {
return this.items;
}
public void setItems(Set<Items> items) {
this.items = items;
}
}
@Entity
@Table(name = "items", schema = "myschema", catalog = "mydb")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Items implements Serializable {
private Integer id_item;
private String item_name;
private Integer id_cart;
@JsonBackReference
private Cart cart;
//getters and setters...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="id_cart")
public Cart getCart(){
return this.cart;
}
public void setCart(Cart c){
this.cart=c;
this.id_cart=this.cart.getId_cart();
}
}
将此JSON作为我的请求:
{
"name": "My cart 1",
"items": [
{
"item_name": "Item number 1"
},
{
"item_name": "Item number 2"
}
]
}
//just set items
{
"id_cart": "1",
"item_name": "Item number 3"
}
使用此设置,是否有方法允许用户仅添加项目?到目前为止,我有:
@POST
@Path("item")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@RequestMapping(value="item", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public @ResponseBody
Response loadItems(@RequestBody Items i) {
try{
utx = com.arjuna.ats.jta.UserTransaction.userTransaction();
utx.begin();
em.joinTransaction();
em.persist(i);
utx.commit();
}catch (Exception ex){
utx.rollback();
//generate response...
return response;
}
//generate response...
return response;
}
根据我的请求:
{
"name": "My cart 1",
"items": [
{
"item_name": "Item number 1"
},
{
"item_name": "Item number 2"
}
]
}
//just set items
{
"id_cart": "1",
"item_name": "Item number 3"
}
但我得到了这个错误:
ERROR: null value in column \"id_cart\" violates not-null constraint\n
我知道Items实体中的cart对象为null,这就是为什么我会出现这个错误,我的问题是:通过其id请求cart对象并获取整个记录是否是告诉Hibernate解释JSON中的id\u cart的唯一方法?之所以这样说是因为我试图实现的是这样的:在项目(id\u cart,item\u name)中插入值(1,“item number 3”),而不必首先获取id为1的cart对象这个答案可能有用: