java—我的jpa存储库请求正在返回缓存,而我没有在SpringBoot中启用它

bvjveswy  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(251)

我需要帮助,因为我正在按顺序执行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进行更改
你能帮助我吗?

mrfwxfqh

mrfwxfqh1#

您看到的是jpa的一级缓存的效果,它不能被禁用。但是您可以从 EntityManager 或者启动一个新会话,该会话将以空缓存开始。

相关问题