【问题标题】:Hibernate onetomany manytoone issueHibernate onetomany manytoone 问题
【发布时间】:2014-10-25 17:05:08
【问题描述】:

我使用休眠作为 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;
    ...
}

当我想通过 TypeShop id 以 json 格式查找所有 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 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

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

已编辑: 如果我从 Shop 实体中删除 TypeShop 的吸气剂,这会有所帮助。但是我很好奇是否有更好的方法。

【问题讨论】:

    标签: java json hibernate


    【解决方案1】:

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

    检查 @JsonIdentityInfo 和 @JsonBackReference/@JsonManagedReference

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

    应该可以解决你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      相关资源
      最近更新 更多