面向对象java代码和firebase的问题

面向对象java代码和firebase的问题,java,firebase,oop,google-cloud-firestore,Java,Firebase,Oop,Google Cloud Firestore,开门见山: 我有一个类User,它包含一个安全性的实例: public class User { private long id; private String name; Security security; public User(String nname, String password, String userName, String email) { this.id = 0; this.name = nname

开门见山:

我有一个类User,它包含一个安全性的实例:

public class User {
    
    private long id;
    private String name;
    Security security;

    public User(String nname, String password, String userName, String email) {
        this.id = 0;
        this.name = nname;
        this.security = new Security(password, userName, email);
    }

    /**
     * getters and setters
     */
}
FirebaseApp app = FirebaseApp.initializeApp(options);
this.db = com.google.firebase.cloud.FirestoreClient.getFirestore(app);
ApiFuture<WriteResult> collectionsApiFuture = 
        db.collection("users").document(user.getName()).set(user);
System.out.println(collectionsApiFuture.get().getUpdateTime().toString());
FirebaseInitialise testFirebase = new FirebaseInitialise();
User tempUser = new User("Ollie", "123", "OlliesRealm", "email@mail.com");
testFirebase.initialize(tempUser);
是的,id目前是临时的,用于测试,安全性具有非常相似的格式

接下来,我运行以下代码来设置我的firebase条目

public class User {
    
    private long id;
    private String name;
    Security security;

    public User(String nname, String password, String userName, String email) {
        this.id = 0;
        this.name = nname;
        this.security = new Security(password, userName, email);
    }

    /**
     * getters and setters
     */
}
FirebaseApp app = FirebaseApp.initializeApp(options);
this.db = com.google.firebase.cloud.FirestoreClient.getFirestore(app);
ApiFuture<WriteResult> collectionsApiFuture = 
        db.collection("users").document(user.getName()).set(user);
System.out.println(collectionsApiFuture.get().getUpdateTime().toString());
FirebaseInitialise testFirebase = new FirebaseInitialise();
User tempUser = new User("Ollie", "123", "OlliesRealm", "email@mail.com");
testFirebase.initialize(tempUser);
但是,当我运行代码时,firestore应用程序中的关系显示为:

id: 0
name: "Ollie"
security:
    unlocked: true
    userName: "OlliesRealm"
我希望它能够正确地保存完整的安全信息,这似乎是无法做到的,或者只保存它的ID,而不实际将安全信息存储在user中


如果有人能提出任何建议或帮助我,我将不胜感激

要获得完整对象的安全性,只需在Firestore数据库上上载时专门保存即可

@覆盖
公共字符串createUser(用户){
字符串id=UUID.randomUUID().toString();
DocumentReference document=userCollection.document(id);
Map data=Maps.newHashMap();
data.put(“name”,user.getName());
data.put(“security”,user.getSecurity());
试一试{
document.set(data.get();
}捕获(中断异常|执行异常e){
e、 printStackTrace();
}
如果要将它们分开,只需为安全性创建一个不同的集合,并将其保存在该集合中,如下所示:

@覆盖
公共字符串createUser(用户){
字符串id=UUID.randomUUID().toString();
DocumentReference userDocument=userCollection.document(id);
DocumentReference securityDocument=SecurityCollection.document(id);
Security temp=user.getSecurity();
Map userData=Maps.newHashMap();
Map securityData=Maps.newHashMap();
userData.put(“name”,user.getName());
userData.put(“security”,user.getSecurity());
securityData.put(“username”,security.getUserName());
securityData.put(“password”,security.getPassword());
securityData.put(“email”,security.getEmail());
试一试{
userDocument.set(userData.get();
securityDocument.set(securityData.get();
}捕获(中断异常|执行异常e){
e、 printStackTrace();
}

基于对文档的粗略阅读,我怀疑Firebase需要被告知代表
User.security
作为参考。我从这个项目开始,我认为我的主要问题实际上不是每个属性都有基本的getter和setter,这最终解决了它。不过这也是一个非常有用的答案非常感谢!接受。