Как создать экземпляр модели с использованием фреймворка 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 3

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);  
  }