【问题标题】:Play Framework - How to inherit from superclass?Play Framework - 如何从超类继承?
【发布时间】:2012-11-19 03:52:29
【问题描述】:

我有一个扩展 Model 的 User 类,以及两个我想扩展 User 类的类。

User.java:

@Entity
@Table(name = "users")
public class User extends Model implements RoleHolder {

    private static final long serialVersionUID = 1L;

    @Id
    public Long id;

...

Driver.java:

public class Driver extends User {
...

Customer.java:

public class Customer extends User {
...

编辑 所有三个实体都需要直接访问。换句话说,我有用户、客户和驱动程序;客户和司机恰好共享用户的所有属性。因此,我需要一个有效的用户实体以及客户和司机。

我需要能够获得所有用户(包括客户和司机)的列表。

我无法弄清楚如何在 Play 中使用 ebean 来完成这项工作。我怎样才能做到这一点?

【问题讨论】:

  • 抱歉,到底是什么问题?不能直接使用用户是什么意思?

标签: java playframework playframework-2.0 ebean


【解决方案1】:

要保持User 表具体,您可以使用@Inheritance 注释。请参阅Play Framework 2 Ebean and InheritanceType as JOINED 了解有关此问题的讨论。

也可以使用@OneToOne 手动加入司机和客户的辅助表。

使用@OneToOne 也将有利于组合而不是继承,这被认为是一种很好的做法。

【讨论】:

  • 感谢 Samuel,我在找到 @OneToOne 之前尝试了 @Inheritance 轨道。我走了那条路,我的问题就解决了。谢谢!
【解决方案2】:

这可能是 MappedSuperClass 注解的一个用例。有关文档,请参阅 http://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html。据推测,这是由 Ebean 支持的,尽管缺乏关于它的文档。

【讨论】:

  • 感谢 Samuel,不幸的是,MappedSuperClass 不允许 User 实体存在。如果我只需要访问子类,这是完美的解决方案!
  • 然后有一个 AbstractUser 超类 (MappedSuperClass) 和 User 以及其他继承自它——我不清楚为什么你绝对需要 User .
  • 您建议的 AbstractUser 类的问题是,如果我想要完整的用户列表,我必须执行三个查询,一个用于用户,一个用于客户,一个用于驱动程序。在我的模型中,客户就是用户,司机就是用户。
  • 我已经为这种情况添加了一个新答案:-)
猜你喜欢
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 2017-12-19
  • 2011-12-27
  • 2013-05-01
  • 2015-03-14
相关资源
最近更新 更多