gpt4 book ai didi

java - 删除双向递归关系的最简单方法?

转载 作者:太空狗 更新时间:2023-10-29 23:02:45 26 4
gpt4 key购买 nike

我使用 Gson 库将 Java 对象转换为 Json 响应...问题是,在 JPA 请求之后,由于与其他实体 (see my previous question) 的递归关系,无法转换从 DB 检索到的对象,例如:

public class Gps implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "IMEI", nullable = false, length = 20)
private String imei;
//some code here...
@OneToMany(cascade = CascadeType.ALL, mappedBy = "gpsImei", fetch = FetchType.LAZY)
private List<Coordonnees> coordonneesList;


public class Coordonnees implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "IDCOORDONNEES", nullable = false)
private Integer idcoordonnees;
//some code here...
@JoinColumn(name = "GPS_IMEI", referencedColumnName = "IMEI", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Gps gpsImei;

我的源代码:

  EntityManagerFactory emf=Persistence.createEntityManagerFactory("JavaApplication21PU");
GpsJpaController gjc=new GpsJpaController(emf);

Gps gps=gjc.findGps("123456789012345");

for(int i=0;i<gps.getCoordonneesList().size();i++){
gps.getCoordonneesList().get(i).setGpsImei(null);
}

Gson gson=new Gson();
String json=gson.toJson(gps);//convert to json response

System.out.println(json);

正如你在这里看到的,我做了:

   for(int i=0;i<gps.getCoordonneesList().size();i++){
gps.getCoordonneesList().get(i).setGpsImei(null);
}

仅通过为 coordonneesList 中的每个 GPS 对象设置 null 来终止递归关系..

您认为这是一个很好的解决方案,还是有其他更实用的方法?谢谢

最佳答案

有一个名为 GraphAdapterBuilder 的 Gson 扩展可以序列化包含循环引用的对象。这是相应测试用例中的一个非常简化的示例:

Roshambo rock = new Roshambo("ROCK");
Roshambo scissors = new Roshambo("SCISSORS");
Roshambo paper = new Roshambo("PAPER");
rock.beats = scissors;
scissors.beats = paper;
paper.beats = rock;

GsonBuilder gsonBuilder = new GsonBuilder();
new GraphAdapterBuilder()
.addType(Roshambo.class)
.registerOn(gsonBuilder);
Gson gson = gsonBuilder.create();
System.out.println(gson.toJson(rock));

这打印:

{
'0x1': {'name': 'ROCK', 'beats': '0x2'},
'0x2': {'name': 'SCISSORS', 'beats': '0x3'},
'0x3': {'name': 'PAPER', 'beats': '0x1'}
}

请注意,GraphAdapterBuilder 类包含在 gson.jar 中。如果你想使用它,你必须手动将它复制到你的项目中。

关于java - 删除双向递归关系的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10036958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com