如何在squeryl中实现@MappedSuperClass?

时间:2014-02-04 06:00:29

标签: scala squeryl

我在数据库中有12个表。并且所有表都具有相同的列和相同的关系。

所以我在JPA中编写了代码。

@MappedSuperclass
public class BaseAddress {
... properties and relations (@ManyToOne / @OneToMany)
}

@Entity
public class Address1 extends BaseAddress {
  // has no code. properties and relations are inherited.
}

@Entity 
public class Address2 extends BaseAddress {
  // has no code. properties and relations are inherited.    
}

但是,我不知道如何在squeryl模式定义中实现它。 如何在squeryl中实现关系继承?

1 个答案:

答案 0 :(得分:2)

Squeryl将反映所有可用字段。它没有区分它们是否是遗传的。类似的东西:

class BaseAddress(id: Long, address: String)

class Address1(id: Long, address: String) extends BaseAddress(id, address)

class Address2(id: Long, address: String) extends BaseAddress(id, address)

object MySchema extends Schema {

  val address1 = table[Address1]

  val address2 = table[Address2]

}

应该与您发布的Hibernate代码类似。对于关系,使用Squeryl,它们在Schema对象中定义,而不是在模型类中定义。如果您多次定义相同的关系,则可以添加辅助方法:

def addressTableWithUserRelation[T <: BaseAddress]: (Table[T], OneToManyRelation[User, T]) = {
  val table = Table[T]
  val relation = oneToManyRelation(users, table)((u,t) => u.id === t.userId)
  (table, relation)
}

val (address1, address1ToUser) = addressTableWithUserRelation[Address1]