我在数据库中有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中实现关系继承?
答案 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]