我创建了使用 Ebeans 的示例应用程序:
型号:
@Entity
public class Numm extends Model {
@Id
private long id;
public long number;
@Transient
static long counter = 0;
public Numm() {
number = counter++;
}
}
Controller :
public static Result index() {
for(int i = 0; i < 10; i++) {
Numm numm = new Numm();
numm.save();
}
}
...数据库中的 Numm 对象是:
id, number
1, 4
2, 5
3, 6
4, 7
5, 8
6, 9
7, 10
8, 11
9, 12
10, 13
为什么第一行不是
1, 0
这是一个错误吗?我的假设是 Ebeans 在启动时创建了一些对象。
最佳答案
Ebean 在启动时创建一些对象来检查模型是否正确。作为示例,您可以看到 BeanDescriptorManager 中的 setBeanReflect
方法。类(class)。
Ebean 为每个模型类创建 4 个对象,一段时间后创建另外 4 个对象。所以你不能依赖默认构造函数中增加的计数器。
但是有一个解决方法。您可以向构造函数添加参数。例如:
public Numm(int a) {
number = counter++;
}
然后在你的 Controller 中:
public static Result index() {
for(int i = 0; i < 10; i++) {
Numm numm = new Numm(0);
numm.save();
}
}
然后在上面的循环中创建的实例的编号将从 0 开始。
关于java - Ebean 在启动时创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23073391/