我的模型类出了问题。例如:
@Entity
@Table(name = "kreis", catalog = "quanto_portal")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="idKreis")
public class Kreis implements java.io.Serializable {
private Integer idKreis;
private String kreisname;
private Set<Ort> orts = new HashSet<Ort>(0);
public Kreis() {
}
public Kreis(String kreisname) {
this.kreisname = kreisname;
}
public Kreis(String kreisname, Set<Ort> orts) {
this.kreisname = kreisname;
this.orts = orts;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "idKreis", unique = true, nullable = false)
public Integer getIdKreis() {
return this.idKreis;
}
public void setIdKreis(Integer idKreis) {
this.idKreis = idKreis;
}
@Column(name = "kreisname", nullable = false, length = 50)
public String getKreisname() {
return this.kreisname;
}
public void setKreisname(String kreisname) {
this.kreisname = kreisname;
}
//@JsonManagedReference(value="kreis-ort")
@OneToMany(fetch = FetchType.LAZY, mappedBy = "kreis")
public Set<Ort> getOrts() {
return this.orts;
}
public void setOrts(Set<Ort> orts) {
this.orts = orts;
}
当我查询&#34; Kreis&#34; -Object时,它也在内部查询依赖&#34; Orts&#34;,尽管设置了Lazy-Loading。接下来,在&#34; Ort&#34; -class中完成依赖&#34; Kreis&#34; -objects的语句(因为它是Ort的属性;设置了Lazy-Loading)。如果&#34; Ort&#34;具有更多的依赖类/属性,例如&#34; Persons&#34;,甚至整个&#34; Person&#34; -class被加载。 谁能告诉我为什么?我是否需要在Spring中设置属性或初始化特定的bean?
到目前为止,我需要忽略(使用@JsonIgnoreProperties)引用另一个类的每个属性。我认为这是错误的,导致延迟加载会影响dependet对象只被加载,如果我要求它。
答案 0 :(得分:1)
LAZY
表示在访问集合时从数据库延迟加载 。一旦Jackson开始序列化对象,它就会读取所有字段,包括orts
字段,这会触发延迟加载。
如果您只想序列化某些字段,那么您可能希望从控制器返回某种类型的投影;刚刚发布的Spring Data Hopper M1支持从Spring Data存储库返回投影,如果需要处理控制器中的完整实体对象,则支持you can also use Jackson projections。