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