Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 Eben在开始时创建对象?_Java_Database_Playframework_Ebean - Fatal编程技术网

Java Eben在开始时创建对象?

Java Eben在开始时创建对象?,java,database,playframework,ebean,Java,Database,Playframework,Ebean,我创建了使用Ebeans的示例应用程序: 型号: @Entity public class Numm extends Model { @Id private long id; public long number; @Transient static long counter = 0; public Numm() { number = counter++; } } 控制器: public static Result

我创建了使用Ebeans的示例应用程序:

型号:

@Entity
public class Numm extends Model {

    @Id
    private long id;

    public long number;

    @Transient
    static long counter = 0;

    public Numm() {
        number = counter++;
    }
}
控制器:

public static Result index() {
    for(int i = 0; i < 10; i++) {
        Numm numm = new Numm();
        numm.save();
    }
}
public static Result index() {
    for(int i = 0; i < 10; i++) {
        Numm numm = new Numm(0);
        numm.save();
    }
}
为什么第一排不是

1, 0

是虫子吗?我的假设是Ebeans在开始时创建了一些对象。

Ebean在开始时创建了一些对象,以检查模型是否正确。例如,您可以从类中看到
setBeanReflect
方法

Ebean为每个模型类创建4个对象,稍后再创建另外4个对象。所以您不能依赖默认构造函数中增加的计数器

但有一个解决办法。您可以将参数添加到构造函数中。例如:

public Numm(int a) {
    number = counter++;
}
然后在控制器中:

public static Result index() {
    for(int i = 0; i < 10; i++) {
        Numm numm = new Numm();
        numm.save();
    }
}
public static Result index() {
    for(int i = 0; i < 10; i++) {
        Numm numm = new Numm(0);
        numm.save();
    }
}
公共静态结果索引(){
对于(int i=0;i<10;i++){
Numm Numm=新Numm(0);
numm.save();
}
}

然后,在上述循环中创建的实例的数字将从0开始。

Ok-所以,如果我在非默认构造函数中使用计数器,就可以了