编程语言
首页 > 编程语言> > java-如何序列化protobuf中的反向关系

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