如何通过超类和另一个模型之间的关联在 ActiveJDBC 中实现继承模型?
How to implement inherited models in ActiveJDBC with associations between superclass and another model?
我想构建这样的东西:
abstract class Owner extends Model {}
class User extends Owner {}
class Group extends Owner {}
class Thing extends Model {}
其中每个 Thing
都有一个且只有一个 Owner
,可以是 Group
或 User
。
这怎么可能?我是否必须让 Owner 不抽象才能让 ActiveJDBC 将 things-table 中的 owner_id-column 映射到所有者?但是它如何确定我们拥有哪种所有者,正如 http://javalite.io/inheritance 所说的那样,单一 table 继承未在 ActiceJDBC 中实现。
您需要使用 Polymorphic Associations。继承和所有权是有区别的。
ActiveJDBC 继承仅限于将通用功能传递给子classes。然后你需要使用关系来创建 "A has many B" 等,而 Polymorphic Associations 似乎是你最好的选择。
因此,在您的情况下,User 和 Group 将是 Thing 的多态父级。然后,您可以选择创建一个单独的 class 所有者(仅当他们共享某些功能时)。
所以..您将拥有三个表:USERS、GROUPS、THINGS。
我想构建这样的东西:
abstract class Owner extends Model {}
class User extends Owner {}
class Group extends Owner {}
class Thing extends Model {}
其中每个 Thing
都有一个且只有一个 Owner
,可以是 Group
或 User
。
这怎么可能?我是否必须让 Owner 不抽象才能让 ActiveJDBC 将 things-table 中的 owner_id-column 映射到所有者?但是它如何确定我们拥有哪种所有者,正如 http://javalite.io/inheritance 所说的那样,单一 table 继承未在 ActiceJDBC 中实现。
您需要使用 Polymorphic Associations。继承和所有权是有区别的。
ActiveJDBC 继承仅限于将通用功能传递给子classes。然后你需要使用关系来创建 "A has many B" 等,而 Polymorphic Associations 似乎是你最好的选择。
因此,在您的情况下,User 和 Group 将是 Thing 的多态父级。然后,您可以选择创建一个单独的 class 所有者(仅当他们共享某些功能时)。
所以..您将拥有三个表:USERS、GROUPS、THINGS。