我正在使用两个数据库,因此在保存表中的数据对象时,我收到以下错误:
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.*.*
答案 0 :(得分:2)
你没有提到你正在使用的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