Java和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

我还在学习与hibernate的关系,请耐心听我说

这些是我的实体,一个购物车项目关系:

@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对象

这个答案可能有用: