Как создать экземпляр модели с использованием фреймворка ebean и scala в игре 2.2
Я хотел бы привести пример модельного объекта проекта Ebean с scala и fremework Play 2.2. Я сталкиваюсь с проблемой с идентификатором автоматической генерации и параметров класса / абстракция :
@Entity
class Task(@Required val label:String) extends Model{
@Id
val id: Long
}
object Task {
var find: Model.Finder[Long, Task] = new Model.Finder[Long, Task](classOf[Long], classOf[Task])
def all(): List[Task] = find.all.asScala.toList
def create(label: String) {
val task = new Task(label)
task.save
}
def delete(id: Long) {
find.ref(id).delete
}
}
Ошибка : "задача класса должна быть абстрактной, так как идентификатор значения не определен". Есть идеи, как избежать этой проблемы?
1 ответ:
Я нашел решение благодаря этой ссылке: http://www.avaje.org/topic-137.html
import javax.persistence._ import play.db.ebean._ import play.data.validation.Constraints._ import scala.collection.JavaConverters._ @Entity @Table( name="Task" ) class Task{ @Id var id:Int = 0 @Column(name="title") var label:String = null } /** * Task Data Access Object. */ object Task extends Dao(classOf[Task]){ def all(): List[Task] = Task.find.findList().asScala.toList def create(label: String) { var task = new Task task.label = label Task.save(task) } def delete(id: Long) { Task.delete(id) } }
И Дао:
/** * Dao for a given Entity bean type. */ abstract class Dao[T](cls:Class[T]) { /** * Find by Id. */ def find(id:Any):T = { return Ebean.find(cls, id) } /** * Find with expressions and joins etc. */ def find():com.avaje.ebean.Query[T] = { return Ebean.find(cls) } /** * Return a reference. */ def ref(id:Any):T = { return Ebean.getReference(cls, id) } /** * Save (insert or update). */ def save(o:Any):Unit = { Ebean.save(o); } /** * Delete. */ def delete(o:Any):Unit = { Ebean.delete(o); }