我需要帮助,因为我正在按顺序执行3个查询,但是spring和jpa在不同的对象上应用了缓存
子对象建立在内存中返回相同的值,但是在每个对象“食物、药物和附件”中,我必须对该子对象进行不同的更改,但是当我更改它时,它似乎是作为一个引用来的,也就是说,我在一个对象中更改它,并在其他对象中复制。
Establishment obj = establishmentService.findById(id);
List<EstablishmentProduct> food = repo.findByEstablishmentAndProductSegment(obj, SegmentEnum.FOOD.getCod());
List<EstablishmentProduct> medication = repo.findByEstablishmentAndProductSegment(obj, SegmentEnum.MEDICATION.getCod());
List<EstablishmentProduct> accessories = repo.findByEstablishmentAndProductSegment(obj, SegmentEnum.ACCESSORIES.getCod());
我的实体
@Entity
public class EstablishmentProduct implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String description;
private Integer status;
private Integer quantity;
private Double value;
private Integer productSegment;
private boolean deleted = false;
@ManyToOne(cascade = CascadeType.DETACH)
@JoinColumn(name = "product_id")
private Product product;
@JsonIgnore
@ManyToOne()
@JoinColumn(name = "establishment_id")
private Establishment establishment;
@Repository
public interface EstablishmentProductRepository extends JpaRepository<EstablishmentProduct, Integer> {
List<EstablishmentProduct> findByEstablishmentAndProductSegment(Establishment establishment, Integer productSegment);
guys,就像实体正在进行的查询一样,已经通过实体建立id进行测试,并返回实体建立的子类的相同指针
estration obj=estrationservice.findbyid(id);
在我看来,spring和jpa正在应用一个我没有请求的缓存,我希望对于每个findbyestablishmentandproductsegment,它将返回新的子对象,而不带缓存。
我已经在所有方面禁用了缓存,但没有任何效果。
我知道Establish对象不会更改,但是product对象会更改,但是正如我所提到的,我需要为返回的每个段对Establish进行更改
你能帮助我吗?
1条答案
按热度按时间mrfwxfqh1#
您看到的是jpa的一级缓存的效果,它不能被禁用。但是您可以从
EntityManager
或者启动一个新会话,该会话将以空缓存开始。