Hibernate onetomany manytoone问题

时间:2014-10-25 17:05:09

标签: java json hibernate

我使用hibernate作为ORM。我有两个实体ShopTypeShopTypeShop可能有几家商店。

@Entity
@Table(name = "shop_types")
public class TypeShop {
    ...
    @OneToMany(fetch = FetchType.EAGER, mappedBy="typeShop", cascade = CascadeType.ALL)
    private Set<Shop> shops;
    ...
}

@Entity
@Table(name = "shops")
public class Shop {
    ...
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name = "shop_type_id")
    private TypeShop typeShop;
    ...
}

如果我想以json格式找到shops TypeShop的所有id,我会得到以下内容:

[{"id":146,"name":"First Name","address":"First Address","description":"First Description","coordinates":"59.842055288480076, 29.700164794921875","contacts":"First Contacts","site":"First web site","mail":"First email","photos":[],"typeShop":{"id":11,"name":"Производство газобетона","shops":[{"id":146,"name":"First Name","address":"First Address","description":"First Description","coordinates":"59.842055288480076, 29.700164794921875","contacts":"First Contacts","site":"First web site","mail":"First email","photos":[],"typeShop":{"id":11,"name":"Производство газобетона","shops":[{"id":146,"name":"First Name","address":"First Address","description":"First Description","coordinates":"59.842055288480076, 29.700164794921875","contacts":"First Contacts","site":"First web site","mail":"First email","photos":[],"typeShop":{"id":11,"name":"Производство газобетона","shops":[{"id":146,"name":"First Name","address":"First Address","description":"First Description","coordinates":"59.842055288480076, 29.700164794921875","contacts":"First Contacts","site":"First web site","mail":"First email","photos":[],"typeShop":{"id":11,"name":"Производство газобетона","shops":[{"id":146,"name":"First Name","address":"First Address","description":"First Description","coordinates":"59.842055288480076, 29.700164794921875","contacts":"First Contacts","site":"First web site","mail":"First email","photos":[],"typeShop":{"id":11,"name":"Производство газобетона","shops":[{"id":146,"name":"First Name","address":"First Address","description":"First Description","coordinates":"59.842055288480076, 29.700164794921875","contacts":"First Contacts","site":"First web site","mail":"First email","photos":[],"typeShop":{"id":11,"name":"Производство газобетона","shops":[{"id":146,"name":"First Name","address":"First Address","description":"First Description","coordinates":"59.842055288480076, 29.700164794921875","contacts":"First Contacts","site":"First web site","mail":"First email","photos":[],"typeShop":{"id":11,"name":"Производство газобетона","shops":[{"id":146,"name":"First Name","address":"First Address","description":"First Description","coordinates":"59.842055288480076, 29.700164794921875","contacts":"First Contacts","site":"First web site","mail":"First email","photos":[],"typeShop":{"id":11,"name":"Производство газобетона","shops":[{"id":146,"name":"First Name","address":"First Address","description":"First Description","coordinates":"59.842055288480076, 29.700164794921875","contacts":"First Contacts","site":"First web site","mail":"First email","photos":[],"typeShop":{"id":11,"name":"Производство газобетона","shops":[{"id":146,"name":"First Name","address":"First Address","description":"First Description","coordinates":"59.842055288480076, 29.700164794921875","contacts":"First Contacts","site":"First web site","mail":"First email","photos":[],"typeShop":{"id":11,"name":"Производство газобетона","shops":[{"id":146,"name":"First Name","address":"First Address","description":"First .....

这个名单一次又一次地继续。正如您所看到的,因为获取类型EAGER,我获得了无限的json格式。我已尝试将EAGER更改为LAZY,但我获得了“failed to lazily initialize a collection of role” exception

我该如何解决这个问题?提前谢谢!

编辑: 如果我从TypeShop实体移除Shop的getter,会有所帮助。但是,如果有更好的方法,我很好奇。

1 个答案:

答案 0 :(得分:0)

这称为JSON双向参考问题。参考:http://wiki.fasterxml.com/JacksonFeatureBiDirReferences

检查 @JsonIdentityInfo和@ JsonBackReference / @JsonManagedReference

使用

注释您的实体
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")

应该解决你的问题。