如何使用现有的@OneToOne关系来维护新实体?

时间:2015-08-18 06:59:32

标签: java spring hibernate spring-data spring-data-jpa

'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);

我该怎么做?

或者此外:你会认为应该以这种方式工作吗?或者我误解了这个机制?

1 个答案:

答案 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;
}