【问题标题】:Ebean creates objects on start?Ebean 在启动时创建对象?
【发布时间】:2014-04-15 01:56:00
【问题描述】:

我创建了使用 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 在开始时创建了一些对象。

【问题讨论】:

    标签: java database playframework ebean


    【解决方案1】:

    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 开始。

    【讨论】:

    • 好的 - 所以如果我在非默认构造函数中使用计数器就可以了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    相关资源
    最近更新 更多