java - 我可以在@MappedSuperclasses 上创建静态方法吗?

标签 java jpa playframework

我有一个摘要TemporalModel向所有扩展模型添加 createdupdated 字段的类(用 @MappedSuperclass 注释)。我想给它添加一个 getLatest() 静态方法:

public static TemporalModel getLatest() {
    return find("order by created").first();
}

当我把这个方法放在基类上,并通过具体类(Transaction.getLatest())调用它时,出现错误:

UnsupportedOperationException occured : Please annotate your JPA model with @javax.persistence.Entity annotation.

我怀疑这是因为 JPA 实际上并不知道我“通过”基类调用此方法(Java 中没有真正的静态方法继承)。

有没有另一种方法可以一次实现这个方法,而不是在所有实体类上重复它?

更新 - 描述了一种实现此目的的方法(我在另一个较重的应用程序中使用它)here (gist)。但是,在我当前的应用程序中,我不想使用存储库,我想知道是否有另一种更轻便的解决方案。

最佳答案

构造函数和静态方法永远不能是抽象的。抽象类背后的思想 是创建必须在子类中解决的方法蓝图。我建议尝试使用接口(interface) TemporalModel 而不是抽象类,在抽象类中创建方法 public static TemporalModel getLatest();

关于java - 我可以在@MappedSuperclasses 上创建静态方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8681943/

相关文章:

java - id 列和 JPA 的问题

java - 如何获取要在 ArrayList.set() 方法中使用的二维数组列表的索引?

JPA 查询 select max(to_number(substr(reason_id,2,7))) from reason_type;节点 : org. 没有数据类型 hibernate.hql.internal.ast.tree.AggregateNode

java - 命名查询以选择具有 MAX(列名)的行,另一列为 DISTINCT

java - Ebean 多个 @ManyToMany 提供奇怪的行为

java - PlayFramework 初学者。路由定义错误

java - Spring 启动 : Unable to configure

java - JavaScript 中的计算结果与 Java 中的不同

java - 模拟循环内的集合和逻辑

JPA - 插入连接表的正确方法(带有额外的列)