Sample базовая модель может выглядеть следующим образом:
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;
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;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.Date;
@Entity
@DiscriminatorValue("post")
public class Post extends Content {
@Id
public Long id;
public static Finder<Long, Post> find = new Finder<>(Long.class, Post.class);
public Date publishDate;
}
Таким образом, вы можете выбрать все содержимое с помощью:
List<Content> contents = Content.find.where().orderBy("dtype ASC").findList();
Конечно эти объекты будут только общие поля: id
, dtype
, title
, created
и modified
, для получения т (Новости) newsSource
или (Post) publishDate
вам нужно, чтобы получить эти объекты с их собственными искатели, т.е. используя id
значение из общий Запрос на контент.
Hm, но если у вас есть метод 'find', объявленный в вашем' Element', он всегда выбирает только строки с 'dtype = 'Element'', не так ли? в таком случае сортировка по нему не нужна. – biesior
Ну, я хочу, чтобы в поиске присутствовали оба класса 'Group'' 'Model'. Поэтому я использую find в базовом классе ('Element'). Но я хочу, чтобы объекты из группы появлялись перед моделью. – dominik
Просто созданный пример приложения с унаследованными таблицами, можно использовать поле дискриминатора в вашем finder ... abyway есть некоторая работа, чтобы сделать :) – biesior