丈夫.java
package com.example.demo.com.example.domain;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.persistence.*;
//@Data
//@NoArgsConstructor
//@EqualsAndHashCode
//@ToString
@Entity
@Table(name = "t_husban")
public class Husband {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String job;
@OneToOne
@JoinColumn(name = "wife_fk",referencedColumnName = "id")
private Wife wife;
//omitted getter/setter
}
妻子.java
package com.example.demo.com.example.domain;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.persistence.*;
//@Data
//@NoArgsConstructor
@EqualsAndHashCode(exclude = "husband",callSuper = false)
@Entity
@Table(name = "t_wife")
public class Wife {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@OneToOne(mappedBy = "wife",cascade = {CascadeType.ALL})
private Husband husband;
//omitted getter/setter
}
Service.java
@Service
public class TestOneToOneEitherSide {
@Autowired
private WifeRepository wifeDao;
@Autowired
private HusbandRepository husbandDao;
public Husband testCreate() {
Husband husband = husbandDao.findByName("Wang");
return husband;
}
}
当我使用spring数据jpa从数据库中查询丈夫时,结果发生无限递归,参见下图。使用@OneToOne注释时出了什么问题?有人可以给我一些建议吗?或者我以错误的方式使用了注释。
图片
这是一个已知问题,当您具有双向关系时,杰克逊将尝试从另一侧序列化一侧的每个引用,以便逻辑上具有无限递归。
解决方案:有很多解决方案,可以在一侧使用@JsonIgnore以避免序列化带注释的引用,从而破坏了无限递归
@EqualsAndHashCode(exclude = "husband",callSuper = false)
@Entity
@Table(name = "t_wife")
public class Wife {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@OneToOne(mappedBy = "wife",cascade = {CascadeType.ALL})
@JsonIgnore
private Husband husband;
//omitted getter/setter
}
您也可以使用@ JsonManagedReference / @
JsonBackReference,请查看此链接以获取更多有关如何使用它们的信息
这个答案有一个问题,如果您尝试序列化妻子的方向,您将没有丈夫对象,因为解决方案是避免序列化它。
有一个很好的解决方案,它在此链接中提到,其思想是生成对父实体的引用,因此,如果您要序列化丈夫,您将拥有丈夫->妻子-> [引用丈夫而不是丈夫]
,您所需要做的就是使用@JsonIdentityInfo注释您的实体
@EqualsAndHashCode(exclude = "husband",callSuper = false)
@Entity
@Table(name = "t_wife")
@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="@id")
public class Wife {
@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="@id")
@Entity
@Table(name = "t_husban")
public class Husband {
@Id
产品类别: 提供程序类: Prices_1类:
我试图在注释中创建一些信息树结构。经过一些尝试和帮助(请参阅java注释中的类型层次结构),我转向了以下模型。 该节点应允许我定义一级条件树。LogicalPression中的值定义子节点(属性和其他节点)之间的关系。问题是注释不允许递归依赖: 即使我在Node和NodeList包含节点列表中添加了一些NodeList注释,循环依赖也会再次被识别。 循环注释定义有什么解决方案吗?
在尝试执行GET到发布者存储库时,我正在执行GET和无限循环。 出版商: 书: 完整代码可在此处获得: https://github.com/vanyasav/library
我用的是Spring Roo 1.2.1和Jackson 1.9.7。在使用json序列化我的类时,我得到了一个JsonMappingException。 我读了以下帖子,但没有找到适合我的工作解决方案: Jackson的无限递归 Jackson-具有双方向关系的实体序列化(避免循环) 我不知道为什么JsonIgnore在属性QueueOuts的类Queue中不起作用。我也尝试了JsonManag
问题内容: 我想覆盖对类中一个变量的访问,但通常返回所有其他变量。我该怎么做呢? 我尝试了以下操作(它也应说明我要执行的操作),但是出现了递归错误: 问题答案: 您收到递归错误,因为您尝试访问其中的属性会再次调用您。如果你使用的不是,它的工作原理: 之所以有效,是因为(在此示例中)是基类。通过调用您的基本版本,可以避免您以前遇到的递归地狱。 IPython的输出与foo.py中的代码: 更新: 在
我最近实现了一个4X4井字游戏的代码,这是使用极大极小算法。然而,我的极大极小函数无限次地递归调用自己。 初始板 (4X4) 井字 - 轮到电脑的代码- 在上面的代码中是船上的空位置,返回“X”(如果玩家X获胜),返回“O”(如果玩家O获胜) checkGameOver函数-