JPA LAZY加载测试用例

yks3o0rb  于 2023-10-20  发布在  Spring
关注(0)|答案(1)|浏览(96)

我有一个合约实体,它与generatorState实体有一对一的Map
我保存一个合同,它工作,并保存合同和generatorState然而,当我在Postman中获得合同时,我有generatorState的详细信息,而我试图将其设置为LAZY
有没有人能告诉我如何让合同实体有/没有generatorState的细节
主要

@Override
    public void run(String... args) throws Exception {

        Contract c1 = new Contract (60,"TSTE");

//        GeneratorState gs = new GeneratorState(60,100);
//        c.setGeneratorState(gs);
//
//        contractRepository.save(c);
//        Contract c2 = contractRepository.findById(60).get();
//        System.out.println("coucou");
 
    }

合同主体

@Entity
@Data
@NoArgsConstructor
@Table(name="contracts")
public class Contract {

    @Id
    int id;

    String symbol;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name ="id")
    private GeneratorState generatorState;

    public Contract(int id, String symbol) {
        this.id = id;
        this.symbol = symbol;
    }

    @JsonIgnore
    @CreationTimestamp
    @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP WITH TIME ZONE")
    private ZonedDateTime createdOn;

    @JsonIgnore
    @UpdateTimestamp
    @Column(nullable = false, columnDefinition = "TIMESTAMP WITH TIME ZONE")
    private ZonedDateTime updatedOn;


}

GeneratorState

@Entity
@Table(name="state_generator")
@NoArgsConstructor
public class GeneratorState {

    @Id
    int generatorId;

    public int getGeneratorId() {
        return generatorId;
    }

    public double getLastPrice() {
        return lastPrice;
    }

    double lastPrice;

    @JsonIgnore
    @OneToOne(mappedBy = "generatorState")
    Contract contract;

    public GeneratorState(int generatorId, double lastPrice) {
        this.generatorId = generatorId;
        this.lastPrice = lastPrice;
    }
}

bhmjp9jg

bhmjp9jg1#

the documentation中,我们发现FetchType.LAZY意味着数据可以延迟获取。
它并不强制延迟获取,实体作为整体交付的决定由框架做出,这些决定通常是有意义的。
特别是在你的情况下,有一个1:1的关系,框架将提供在大多数情况下扩展的实体。
迫使它懒惰的最好方法是使它成为1:n。(不建议tho)
有关更多信息,请参阅that blog
有一些方法可以强制它使用Lazy loaded。
另外,这可能是this question的副本

相关问题