spring序列化类中的每个属性(延迟加载?)

时间:2016-02-15 21:53:42

标签: java spring spring-mvc lazy-loading fetch

我的模型类出了问题。例如:

@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对象只被加载,如果我要求它。

1 个答案:

答案 0 :(得分:1)

LAZY表示在访问集合时从数据库延迟加载 。一旦Jackson开始序列化对象,它就会读取所有字段,包括orts字段,这会触发延迟加载。

如果您只想序列化某些字段,那么您可能希望从控制器返回某种类型的投影;刚刚发布的Spring Data Hopper M1支持从Spring Data存储库返回投影,如果需要处理控制器中的完整实体对象,则支持you can also use Jackson projections