PersistenceException:[models.Task]出错它没有得到增强,但是它的超类

时间:2014-06-27 06:25:03

标签: playframework ebean

我正在使用两个数据库,因此在保存表中的数据对象时,我收到以下错误:

PersistenceException:[models.Task]出错它没有增强但是它的superClass [class play.db.ebean.Model]有? (不允许在单个继承层次结构中混合增强)标记[play.db.ebean.Model] className [models.Task]

我使用的是两个Java类,一个是Task.class,另一个是Userdetails.class:

Task.class:

@Entity
@Table(name="third")
public class Task extends Model {

    @Id
    @Column(name="id")
    private int id;

    @Column(name="name")
    private String username;

    public static Finder finduser=new Finder<String,Task>(String.class,Task.class);

}

和Userdetails.class:

@Entity
@Table(name="userdetails")
public class UserDetail extends Model{

    @Id
    @Column(name="id")
    private int id;

    @Column(name="username")
    private String username;
    @Column(name="itemdetail")
    private String itemname;

    public static Finder finduser=new Finder<String,UserDetail (String.class,UserDetail.class);
}

我的application.conf文件是:

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"
db.default.user=root
ebean.default="models.UserDetail"
evolutionplugin=disabled

db.secondary.driver=com.mysql.jdbc.Driver
db.secondary.url="jdbc:mysql://localhost:3306/secondary?characterEncoding=UTF-8"
db.secondary.user=root
ebean.secondary="models.Task"

我已尝试过stackoverflow的一些解决方案,但它仍无法正常工作。其中一些人喜欢:

1. @MappedSuperclass
2. ebean.dafault=model.*.*

1 个答案:

答案 0 :(得分:2)

你有read this SO question吗?

你没有提到你正在使用的Play版本? 以下配置适用于Play 2.2.3:

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"
db.default.user=xxx
db.default.password="xxx"
ebean.default="models.UserDetail"

db.secondary.driver=com.mysql.jdbc.Driver
db.secondary.url="jdbc:mysql://localhost:3306/secondary?characterEncoding=UTF-8"
db.secondary.user=xxx
db.secondary.password="xxx"
ebean.secondary="models.Task"

以下控制器代码将您的实体(按原样)正确保存到两个数据库中:

public static Result index() {
    UserDetail userDetail = new UserDetail();
    userDetail.save();

    Task task = new Task();
    task.save("secondary");
}

请注意,我将服务器名称传递给save()的{​​{1}}方法。这告诉Ebean在保存时使用哪个数据源。

为什么您的实体字段为models.Task而非private?你是否为了简洁而遗漏了吸气剂/装置者,还是有其他原因吗?我问因为this comment