Jpa 播放框架:按类型排序的继承
在我的应用程序中,我有两个类:Jpa 播放框架:按类型排序的继承,jpa,playframework-2.0,ebean,Jpa,Playframework 2.0,Ebean,在我的应用程序中,我有两个类: - Group - Model 和一个基类元素 我使用单表策略来持久化这些模型(策略=InheritanceType.SINGLE\u表)。因此,在我的表中创建了一列dtype 我现在尝试根据以下类型对我的页面进行排序: find.where().disjunction() .add(Expr.ilike("name", "%" + filter + "%")) .orderBy("dtype as
- Group
- Model
和一个基类元素
我使用单表策略来持久化这些模型<代码>(策略=InheritanceType.SINGLE\u表)。因此,在我的表中创建了一列dtype
我现在尝试根据以下类型对我的页面进行排序:
find.where().disjunction()
.add(Expr.ilike("name", "%" + filter + "%"))
.orderBy("dtype asc, name asc," + sortBy + " " + order).findList()
但这会引发一个异常,即找不到数据类型
如何根据类型进行排序
谢谢 示例基础模型可以如下所示:
package models.db;
import play.db.ebean.Model;
import javax.persistence.*;
import java.util.Date;
@Entity
@Table(name = "content")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("content")
public abstract class Content extends Model {
@Id
public Long id;
@Column(name = "dtype", insertable = false, updatable = false)
public String dtype;
public static Finder<Long, Content> find = new Finder<>(Long.class, Content.class);
public String title;
public Date created = new Date();
public Date modified = new Date();
}
package models.db;
导入play.db.ebean.Model;
导入javax.persistence.*;
导入java.util.Date;
@实体
@表(name=“content”)
@继承(策略=InheritanceType.SINGLE_表)
@鉴别器列(name=“dtype”,鉴别器类型=鉴别器类型.STRING)
@鉴别器值(“内容”)
公共抽象类内容扩展模型{
@身份证
公共长id;
@列(name=“dtype”,insertable=false,updateable=false)
公共字符串数据类型;
publicstaticfinder=newfinder(Long.class,Content.class);
公共字符串标题;
创建的公共日期=新日期();
修改的公共日期=新日期();
}
然后您可以将其扩展为:
package models.db;
import javax.persistence.*;
@Entity
@DiscriminatorValue("news")
public class News extends Content {
@Id
public Long id;
public static Finder<Long, News> find = new Finder<>(Long.class, News.class);
public String newsSource;
}
package models.db;
导入javax.persistence.*;
@实体
@鉴别器值(“新闻”)
公共类新闻扩展了内容{
@身份证
公共长id;
publicstaticfinder=newfinder(Long.class、News.class);
公共字符串新闻源;
}
或
package models.db;
导入javax.persistence.DiscriminatorValue;
导入javax.persistence.Entity;
导入javax.persistence.Id;
导入java.util.Date;
@实体
@鉴别器值(“post”)
公共类文章扩展了内容{
@身份证
公共长id;
公共静态查找器find=新查找器(Long.class、Post.class);
公开日期发布日期;
}
因此,您可以通过以下方式选择所有内容:
List<Content> contents = Content.find.where().orderBy("dtype ASC").findList();
List contents=Content.find.where().orderBy(“dtype ASC”).findList();
当然,这些对象只有共享字段:
id
、dtype
、title
、创建的
和修改的
,用于获取即(新闻)新闻源
或(帖子)publishDate
您需要使用自己的查找程序获取这些对象,即使用常规内容查询中的id
值。Hm,但是如果您在元素中声明了find
方法,它总是只选择dtype='Element'
的行,不是吗?在这种情况下,不需要按它排序。我希望两个类Group
和Model
都出现在搜索中。所以我在基类(元素
)上使用find。但我希望组中的对象显示在模型之前。刚刚创建了一个带有继承表的示例应用程序,可以在查找器中使用鉴别器字段。。。还有一些工作要做:)看这里:尤其是这里:谢谢。你的解决方案很有效。如果你发布一个答案,我非常乐意接受。
List<Content> contents = Content.find.where().orderBy("dtype ASC").findList();