Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate/jpa忽略@XxxToOne关系中的惰性抓取_Java_Hibernate_Jpa_Fetch_Jpa 2.1 - Fatal编程技术网

Java hibernate/jpa忽略@XxxToOne关系中的惰性抓取

Java hibernate/jpa忽略@XxxToOne关系中的惰性抓取,java,hibernate,jpa,fetch,jpa-2.1,Java,Hibernate,Jpa,Fetch,Jpa 2.1,我正在使用hibernate 5作为JPA实现,我对@OneToMany双向关系有一个问题 这些是我的实体: @Entity(name = "product_item") public class ProductItem { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinCol

我正在使用hibernate 5作为JPA实现,我对@OneToMany双向关系有一个问题

这些是我的实体:

@Entity(name = "product_item")
public class ProductItem {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "receptacle")
    private Receptacle receptacle;

...

}

@Entity(name = "receptacle")
public class Receptacle {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @OneToMany(mappedBy = "receptacle", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<ProductItem> productItems = new HashSet<>();

...

}
但我的问题是hibernate忽略了@ManyTone(fetch=FetchType.LAZY),因此Jackson由于引用链的无限递归(StackOverflowError)而中断,如下所示:

org.glassfish.jersey.server.internal.process.MappableException: com.fasterxml.jackson.databind.JsonMappingException:无限 递归(StackOverflowError)(通过引用链: returnitRest.receptor[“productItems”]->org.hibernate.collection.internal.PersistentSet[0]->returnitRest.ProductItem[“receptor”]->returnitRest.receptor[“productItems”]->org.hibernate.collection.internal.PersistentSet[0]->returnitRest.ProductItem[“receptor”]-

问题1: 我如何告诉hibernate不要获取@manytone关系方向

问题2: 如果我想做的不可能,为什么

问题3: 做我想做的事情的最好方式是什么


非常感谢

< P>根据JPA规范,懒惰加载是提供者完全可以忽略的提示,它完全由提供者(Hibernate在这里)来考虑或忽略它(也给出了单值关联- OneToOne和MytotoNo-默认加载)…所以不能依赖它。
关于递归问题,请检查这里,我与gson有一个类似的问题,这就是我解决问题的方式

我怀疑这个问题可能不是因为
许多人
懒惰
渴望
。你可能需要打破杰克逊的循环,我相信你可能需要将
@JsonIgnore
放在as的一边社交。@Madhusudanareddysunapu为什么你认为懒散抓取对我没有帮助?一旦你指定ManyToOne为懒散,hibernate会尊重这一点,并且不会影响ManyToOne。但是,我认为正在发生的是,随后在jackson反序列化过程中,它也会尝试反序列化ManyToOne Association,除非我们告诉jackson忽略我t、 因此,它会导致在该点获取多个One,然后进入反序列化循环。我没有尝试过它,但为了排除hibernate,您可能需要手动创建ProductItem和插座对象,并手动将它们关联到一个One和多个One设置器中,然后尝试对该对象进行jackson反序列化。I cl在jackson启动之前关闭entityManager…我想知道hibernate是否知道父对象已经在缓存中,因此它会自动创建循环,因此延迟抓取意味着不去数据库获取对象,而是在缓存中构建它。这有意义吗?
String query = "SELECT " 
            + " DISTINCT r" 
            + " FROM" 
            + " receptacle r"
            + " JOIN FETCH product_item pi ON r.id = pi.receptacle.id"
            + " JOIN ereturn er ON er.id = pi.ereturn.id"
            + " WHERE"
            + " r.masterCrossDock IS NULL";