【问题标题】:How to implement inherited models in ActiveJDBC with associations between superclass and another model?如何在 ActiveJDBC 中通过超类和另一个模型之间的关联来实现继承模型?
【发布时间】:2015-08-06 05:18:51
【问题描述】:

我想构建这样的东西:

abstract class Owner extends Model {}
class User extends Owner {}
class Group extends Owner {}
class Thing extends Model {} 

每个Thing 都有一个Owner,可以是GroupUser。 这怎么可能?我是否必须让 Owner 不抽象才能让 ActiveJDBC 将 things-table 中的 owner_id-column 映射到所有者?但是它如何确定我们拥有什么样的所有者,因为 http://javalite.io/inheritance 说 ActiceJDBC 中没有实现单表继承。

【问题讨论】:

    标签: java inheritance activejdbc


    【解决方案1】:

    您需要使用Polymorphic Associations。继承权和所有权是有区别的。

    ActiveJDBC 继承仅限于将通用功能传递给子类。然后你需要使用关系来创建“A 有很多 B”之类的,Polymorphic Associations 似乎是你最好的选择。

    因此,在您的情况下,用户和组将是事物的多态父级。然后,您可以选择创建一个单独的类 Owner(仅当它们共享某些功能时)。

    所以.. 您将拥有三个表:USERS、GROUPS、THINGS。

    【讨论】:

    • 感谢您的回复。此解决方案的缺点是事物可以有一个组一个用户作为父母,而不是有一个唯一的所有者。也许它可以通过验证来处理——我还没有参与 ActiveJDBC 的验证。但优点是它应该可以工作:-)我会试一试。
    • 我似乎很慢地明白:Thig 不能同时拥有双亲,因为特殊的列阻止了这一点。表中只有一个父 ID 及其类型。太好了!
    • 它现在就像一个魅力。我创建了 Owner 类,因为我并不总是知道它到底是什么类型。因此事情有这个方法: public Owner getOwner() { if (this.getString("PARENT_TYPE").endsWith("Group")) { return this.parent(Group.class); } 返回 this.parent(User.class); }
    • 完全正确,这就是为什么它被称为多态关系。
    猜你喜欢
    • 2019-06-27
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    相关资源
    最近更新 更多