使用CascadeType.ALL保存对象时出错

时间:2016-02-27 05:22:23

标签: java hibernate jpa

在尝试保存产品之前,我总是保存一个Impost。

我可以保存Impost,但是当我尝试保存Product(具有Impost)时,它会失败。

我的实体是这样的:

public class Product {

@Id
@GeneratedValue(strategy = AUTO)
private long id;

@NotNull(message = "Name cant be null")
@Size(min = 1, message = "Name must have at least one char!")
private String name;

@NotNull(message = "Price cant be null")
private Double price;

@NotNull(message = "Type cant be null")
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Impost impost;

}

Impost的实体是这样的:

public class Impost {

@Id
@GeneratedValue(strategy = AUTO)
private Long id;

@NotNull(message = "The impost has a name!")
@Size(min = 1)
private String name;

@NotNull(message = "The impost percent is not null!")
private BigDecimal percent;
}

这是我要求提出的要求:

{
    "name": "impost",
    "percent": "50"
}

这是我对产品的要求:

{
"name": "prod",
"price": "10",
"impost": { "id": 1 }
}

但我总是得到这个错误: Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.tax.entity.Impost

1 个答案:

答案 0 :(得分:0)

问题是您在保留产品时未使用托管Impost实例的原因。

在对产品进行反序列化之后设置一个受管理的产品,然后再保留产品:

product.setImpost(entityManager.getReference(product.getImpost().getId()))