Java Eben在开始时创建对象?
我创建了使用Ebeans的示例应用程序: 型号: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
@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-所以,如果我在非默认构造函数中使用计数器,就可以了