java-如何序列化protobuf中的反向关系
作者:互联网
我有以下原始文件
message Person {
// ID
required int32 id = 1;
// name
required string name = 2;
// email
optional string email = 3;
// tasks
repeated Task tasks = 4;
}
message Task {
//ID
required int32 id = 1;
//owner
optional Person owner =2;
}
一个人有任务清单,这是一对多关系.
在任务中,我将反向关系设置为人,即一对一关系.
我的问题是:当我在人员对象中构建任务时,如何序列化与当前人员的反向关系,因为尚未构建人员对象.请参阅 ????以下代码段中的(问号)部分.
我有以下代码进行序列化.
PersonMsg.Person.Builder personBuilder = PersonMsg.Person.newBuilder();
personBuilder.setId(1);
personBuilder.setName("Alex");
personBuilder.setEmail("alex@gmail.com");
personBuilder.addTasks(PersonMsg.Task.newBuilder()
.setId(11)
.setOwner("??????"));
personBuilder.addTasks(PersonMsg.Task.newBuilder()
.setId(12)
.setOwner("???????"));
PersonMsg.Person xxg = personBuilder.build();
提前致谢!
解决方法:
这基本上是一个循环依赖性,您需要解决它,否则程序将无法编译.
由于Task是Person的成员,因此Person和Task之间已经存在组成.基本上,您不需要将Task链接到Person,因为已经存在一个链接.
如果您确实需要双链接,我建议您使用对Person对象的消息引用(例如外键).
message Task {
//ID
required int32 id = 1;
//owner
optional int32 ownerId =2; //which is the owner Person id.
}
标签:serialization,protocol-buffers,reverse,java 来源: https://codeday.me/bug/20191028/1949114.html