Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java应用程序中打印mongodb中的公共静态最终成员?_Java_Mongodb_Playframework_Morphia - Fatal编程技术网

如何在Java应用程序中打印mongodb中的公共静态最终成员?

如何在Java应用程序中打印mongodb中的公共静态最终成员?,java,mongodb,playframework,morphia,Java,Mongodb,Playframework,Morphia,我正在使用Play Morphia创建我的应用程序,我有一个类,它有一个公共静态最终成员,当我在我的对象上使用find()函数时,我得到了这个对象,但只有它的公共或私有成员,而不是它的公共静态最终成员。 例如: public class Person{ public String name; public int age; public static final String id; } 现在,将此对象保存到Mongo,然后调用Person.find().first()

我正在使用Play Morphia创建我的应用程序,我有一个类,它有一个公共静态最终成员,当我在我的对象上使用find()函数时,我得到了这个对象,但只有它的公共或私有成员,而不是它的公共静态最终成员。 例如:

public class Person{
    public String name;
    public int age;
    public static final String id;
}
现在,将此对象保存到Mongo,然后调用Person.find().first()或任何Person.find()函数后,我得到:{“name”:“John”,“age”:30}-->且不包含ID


有人能解决这个问题吗?

静态变量位于类级别,而mongodb实体对应于每个对象。因此,静态变量不会保存到mongodb集合中。您能告诉我们为什么要将静态(甚至最终)变量放入mongodb吗?您的业务逻辑是什么?

首先,您最好将id字段设置为ObjectId类型。因此,我推荐如下设置:

public class Person{

  private final ObjectId id = new ObjectId();
  private String name;
  private int age;

  public void setName(String name) {
    this.name = name;
  }
  public void setAge(int age) {
    this.age = age;
  }
}
ObjectId可以在客户端生成,并且保证是唯一的。请注意,您应该具有静态标志,但最终指示该字段不应更改


将字段本身设置为私有,只是不提供id设置器-这样代码的其他部分就不会影响id字段。

我希望能够保存此人的数据,为客户端请求检索数据,并允许他/她对此人进行更改,但不更改此人的id,虽然客户应该能够看到该人的ID,如果他/她想复制它或其他东西,并最终再次保存它,但该人的ID对所有人来说都是公共的吗?如果答案是否定的,那么您不应该使用
static
scope。ID字段只是一个示例。在我的实际应用程序中,我有许多不同类型的静态最终对象,我想打印它们……我认为您确实需要阅读并理解静态在Java中是如何工作的,请参阅