Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 休眠圆形实体_Java_Hibernate_Jpa_Lazy Initialization - Fatal编程技术网

Java 休眠圆形实体

Java 休眠圆形实体,java,hibernate,jpa,lazy-initialization,Java,Hibernate,Jpa,Lazy Initialization,直截了当地说: 我有一个包含项目的组。我想用外键处理这个关联,这就是为什么它有一个mappedby标记。我的问题是,如果我查询组,我会进入一个无限循环,其中组列出了包含该组的项目,该组列出了再次包含该组的项目……等等。我的实体(最低版本): @实体 公共类数据库组{ @身份证 @GeneratedValue(策略=GenerationType.SEQUENCE) 私人长id; @OneToMany(mappedBy=“group”,cascade=CascadeType.ALL,fetch=Fe

直截了当地说: 我有一个包含项目的组。我想用外键处理这个关联,这就是为什么它有一个mappedby标记。我的问题是,如果我查询组,我会进入一个无限循环,其中组列出了包含该组的项目,该组列出了再次包含该组的项目……等等。我的实体(最低版本):

@实体
公共类数据库组{
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE)
私人长id;
@OneToMany(mappedBy=“group”,cascade=CascadeType.ALL,fetch=FetchType.EAGER)
private List projects=new ArrayList();
}
@实体
公共类项目{
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE)
私人长id;
@manytone(fetch=FetchType.LAZY)
@JoinColumn//添加了这个,因为我在某个地方读到了这篇文章,这会有所帮助,但实际上没有
私有数据库组;
}
有人能帮助我们避免这种循环吗?如果在DBGroup中将fetchtype更改为lazy,则会出现LazyInitializationEXception


非常感谢您的帮助。

当事务结束时,您将获得一个LazyInitializationEXception,用于所有未提取的对象

如果使用查询获取对象,请添加join fetch,如下所示:

从项目p中选择p加入获取p.g组

在退出ejb之前,可以通过调用size方法的代码获取列表


尽可能使用FetchType.LAZY,以防止出现这种情况,尤其是在列表中。

另一个不应该使用
FetchType.EAGER的完美示例。如果我使用LAZY FetchType,这个设置会起作用吗?这意味着我需要以某种方式将LazyInitializationExceptionGets修复到一个无限循环中,在哪里?加载实体后,您将如何处理该实体?序列化为JSON?
LazyInitializationException
可以通过不访问事务/会话之外的属性轻松修复。因此,要么在离开事务之前手动加载depth X(通过简单地访问属性),要么总是打开一个新的事务/会话来获取丢失的数据,但我正在使用结果来形成JAX-RS响应。这将它转换为一个json对象,要做到这一点,我相信它必须迭代所有属性,因此我无法控制这一点,当它无法回答原始问题时,这怎么可能是公认的答案呢?好的,其他人在评论中回答,不允许我选择其他答案,我不知道这是否也回答了这个问题,所以我奖励了试图帮助我的人!
@Entity
public class DBGroup {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;

   @OneToMany(mappedBy = "group",cascade=CascadeType.ALL,fetch = FetchType.EAGER)
   private List<Project> projects = new ArrayList<>();
}


@Entity
public class Project {
  @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private long id;

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn//added this because i read somewhere this would help somehow but it didnt
    private DBGroup group;
}