我在 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);
}
当我这样做时,我的数据库会更新,但我的 View 不会更新。我必须重新启动服务器才能使这些更改出现。
我尝试在 em.merge(product);
之后编写 em.refresh(product);
但出现此错误:
Can not refresh not managed object: package.Product@33891d5d
我很困惑,不知道如何解决这个问题。你能帮我一下吗?
最佳答案
尝试使用entityManager
再次查找实体。这应该为实体提供更新的值。
关于java - JPA 关系实体在数据库上更新,但不在现场更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18560124/