2014-02-11 1 views
3

Я хотел бы указать модельный объект проекта Ebean с scala и fremework Play 2.2. Я лицом к проблеме с идентификатором AutoGenerate и parameteres класс/абстракцией:Как создать экземпляр модели с картой ebean и scala в 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 
    } 
} 

Ошибка: «класс задачи должны быть абстрактными, поскольку значение идентификатор не определен». Любая идея избежать этой проблемы?

ответ

5

Я нашел решение благодаря этой ссылке: 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:

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