Ebean在开始时创建对象?

时间:2014-04-15 01:56:01

标签: 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 index() {
    for(int i = 0; i < 10; i++) {
        Numm numm = new Numm();
        numm.save();
    }
}

...和DB中的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在开始时创建了一些对象。

1 个答案:

答案 0 :(得分:0)

Ebean在启动时创建一些对象,以便检查模型是否正确。例如,您可以在BeanDescriptorManager类中看到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(0);
        numm.save();
    }
}

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