2016-09-04 3 views
0

Я работаю над проектом с фреймворком scala play 2, где я использую пятно как FRM и базу данных postgres.Как создать отношения сущностей в slick?

В моем клиенте проекта есть сущность. Поэтому я также создаю класс и объект клиента, а также класс и объект клиента. Другим объектом является учетная запись. Код указан ниже

case class Customer(id: Option[Int], 
       status: String, 
       balance: Double, 
       payable: Double, 
       created: Option[Instant], 
       updated: Option[Instant]) extends GenericEntity { 
    def this(status: String, 
     balance: Double, 
     payable: Double) = this(None, status, balance, payable, None, None) 
} 


class CustomerTable(tag: Tag) extends GenericTable[Customer](tag, "customer"){ 
    override def id = column[Option[Int]]("id") 
    def status = column[String]("status") 
    def balance = column[Double]("balance") 
    def payable = column[Double]("payable") 
    def account = foreignKey("fk_customer_account", id, Accounts.table)(_.id, onUpdate = ForeignKeyAction.Restrict, onDelete = ForeignKeyAction.Cascade) 

    def * = (id, status, balance, payable, created, updated) <> ((Customer.apply _).tupled, Customer.unapply) 
} 

object Customers extends GenericService[Customer, CustomerTable] { 
    override val table = TableQuery[CustomerTable] 
    val accountTable = TableQuery[AccountTable] 
    override def copyEntityFields(entity: Customer, id: Option[Int], 
    created: Option[Instant], updated: Option[Instant]): Customer = { 
     entity.copy(id = id, created = created, updated = updated) 
    } 
} 

Теперь проблема заключается в том, как создать объект учетной записи внутри объекта клиента? Или как я могу получить счет клиента?

ответ

2

Слик не ORM его просто функциональный реляционный картограф. Вложенные объекты не могут быть непосредственно использованы в slick как Hibernate или любой другой ORMs Вместо

Slick

//Usual ORM mapping works with nested objects 
case class Person(name: String, age: Int, address: Address) //nested object 

//With Slick 
case class Address(addressStr: String, id: Long) //id primary key 
case class Person(name: String, age: Int, addressId: Long) //addressId is the id of the address object and its going to the foreign key 

объекта счета в Клиент

case class Account(id: Long, ....) // .... means other fields. 
case class Customer(accountId: Long, ....) 

Место accountId внутри Customer объекта и сделать его иностранным ключ

Для получения дополнительной информации см Slick примера, приведенного в качестве части документации