JPA关系实体在数据库上更新但不在现场更新

时间:2013-09-01 15:49:59

标签: java spring jpa orm

我在JPA中有产品和评级实体。

在Product.java中:

@OneToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE})
@JoinColumn(name="rating_id")
@JsonManagedReference("product-rating")
private Rating rating;

在Rating.java中:

@OneToOne(mappedBy="rating",cascade=CascadeType.MERGE)
@JsonBackReference("product-rating")
private Product product;

在我的JPAService实现中:

@Override
@Transactional
public void updateCartLineRating(CartLine cartLine, int rating) {
cartLine.setRating(rating);
    em.merge(cartLine);

    Product product = cartLine.getProduct();
    Rating productRatingObject = product.getRating();

    // Here I calculate new rating, then I set it:

    productRatingObject.setRating(productRating);

    // I associate the new Rating to Product (which is the relationship owner) and viceversa

    productRatingObject.setProduct(product);
    product.setRating(productRatingObject);

    em.merge(product);

}

当我这样做时,我的数据库会更新,而我的观点则不会。我必须重新启动服务器才能显示这些更改。

我尝试在em.refresh(product);后写em.merge(product);,但我收到此错误:

  

无法刷新未管理对象:package.Product@33891d5d

我正在制造混乱,我不知道如何解决这个问题。你能帮我吗?

1 个答案:

答案 0 :(得分:0)

尝试再次使用entityManager查找实体。这应该为实体提供更新的值。