java - 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++;
    }
}

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/

相关文章:

java - 正在运行的调试测试

scala - Play Framework/Scala 表单中特定于字段的错误消息

java - 在 Spring Boot 中使用两个数据源

java - 架构:填充 Hashmap 时如何解决 GC 开销问题

php - 如何使用PHP检查MySQL数据库中是否已存在Id

javascript - 并行运行 Node 和 Apache

java - 为什么bean没有注入(inject)到测试类中

java - 向 JSF 2.0 页面回显消息

sql-server - 如果仅在 SQL Server 中的主文件组中创建所有分区,分区是否有益

database - 什么是数据库缓存以及如何使用它?