子项目中的 Ebean 模型类未增强

Posted

技术标签:

【中文标题】子项目中的 Ebean 模型类未增强【英文标题】:Ebean Model class in subproject not enhanced 【发布时间】:2015-12-17 22:17:50 【问题描述】:

我正在尝试将一个简单的应用程序连接到两个数据库,该应用程序有一个子项目。 默认数据库的模型在主项目中,而第二个数据库的模型在子项目中,就像这样;

root/app/models/MainModel
root/sub/app/mods/SubModel

现在我像这样配置 application.conf;

db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
#db.default.user=sa
#db.default.password=""

db.sub.driver=org.postgresql.Driver
db.sub.url="jdbc:postgresql://localhost:5432/test"
db.sub.username= postgres
db.sub.password="password@1"

ebean.default = ["models.*"]
ebean.sub = ["mods.*"]

(是的,我使用 postgre 作为第二个数据库) 和 build.sbt 一样

lazy val sub = project.in(file("sub")).enablePlugins(PlayEbean, PlayEnhancer)

lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean)
.aggregate(sub)
.dependsOn(sub)
playEbeanModels in Compile := Seq("models.*", "mods.*")

root/app/models/MainModel:

package models;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class MainModel implements Serializable 
    private static final long serialVersionUID = 1L;

    @Id
    public Integer id;

    public String name;


和 root/sub/app/mods/SubModel:

package mods;

import javax.persistence.Entity;
import javax.persistence.Id;

import com.avaje.ebean.Model;

@Entity
public class SubModel extends Model 

    @Id
    public Long id;

    public String name;

但是当我运行应用程序时,我得到了这个异常;

CreationException: Unable to create injector, see the following errors: 1)
Error injecting constructor, java.lang.IllegalStateException: 
Bean class mods.SubModel is not enhanced?

显然根项目中的模型得到了增强,但子项目中的模型没有。我错过了什么?我如何让它工作?

【问题讨论】:

顺便说一句,我使用 play 2.4.3 你能发布 SubModel 类吗?它是如何创建的?或者创建一个示例应用程序来重现错误(您可以将其放在 github 上)?否则我必须(手动)构建一个完整的示例应用程序.. 我已更新问题以反映模型。 【参考方案1】:

我遇到了这个问题。我的一半模型在我的子模块中。我将他们的 ebean 配置放在子模块的 application.conf 中。

您应该将下面的行放在 sub/conf/application.conf 中:

ebean.sub = ["mods.*"]

然后在您的 sub/build.sbt 中添加以下行:

playEbeanModels in Compile := Seq("mods.*")

【讨论】:

以上是关于子项目中的 Ebean 模型类未增强的主要内容,如果未能解决你的问题,请参考以下文章

子项目 Play 2.4 中的 Ebean 增强

当依赖于 EBean 增强模型时,如何在 Eclipse 中运行 JUNIT?

深度学习中的数据增强技术

玩 2.4.6,配置测试中字节码增强的构建设置

Laravel 模型访问器从缓存中获取 - 性能增强

使用不加载惰性对象的 Maven 增强模型播放 2.1.3 应用程序