'org.apache.httpcomponents:httpclient-android:4.3.5.1'
我正在使用@Entity
public class Product {
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.DETACH})
private ProductDescription description;
}
和spring-data-jpa
来保留实体。
问题:CrudRespository.save()
实体不会合并,如果我保存它们并且它们已经存在于id。
我认为这只会起作用,因为spring的save方法如下:
@OneToOne
所以我认为完整的实体只会被合并。
public <S extends T> S save(S entity) {
if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}
结果:@Entity
public class ProductDescription {
@Id
private int productId; //set by code, not autogenerated by db
private String text;
}
product = new Product();
description = new ProductDescription();
description.setProductId(123); //assume this id already exists in db
product.setProductDescription(description);
。
我该怎么做?
或者此外:你会认为应该以这种方式工作吗?或者我误解了这个机制?
答案 0 :(得分:0)
合并你必须使用双向@OneToOne的实体。
@Entity
public class Product {
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.DETACH}, mappedBy="parentProduct")
private ProductDescription description;
}
@Entity
public class ProductDescription {
@OneToOne
private Product parentProduct;
}