使用枚举作为 id

2024-01-05

使用JPA,我们可以定义一个枚举作为实体的id吗?

我尝试过以下方法:

public enum AssetType {
   ....
}

@Entity
@IdClass(AssetType.class)
public class Adkeys {

   private AssetType type;

   @Id
   @Enumerated(EnumType.STRING)
   @Column(nullable = false)
   public AssetType getType() {
      return type;
   }

}

使用 OpenJPA,它抱怨:

org.apache.openjpa.persistence.ArgumentException:类型“class aa.Adkeys”指定的 id 类“class aa.AssetType”没有公共无参数构造函数。

所以我的问题是:

  • 我们应该能够使用 enum 作为 JPA 中实体的 id 吗? (即 OpenJPA 中存在错误)
  • 或者我在某个地方犯了错误?
  • 这个问题有什么解决方法吗?

JPA 规范并没有说这是可能的:

2.1.4 主键和实体身份

主键(或复合主键的字段或属性)应该是以下类型之一:任何 Java 原始类型;任何原始包装类型; java.lang.String; java.util.Date; java.sql.Date。然而,一般来说,近似数字类型(例如,浮点类型)不应该在主键中使用。主键使用除这些之外的类型的实体将不可移植。

如果您确实希望给定实体具有编译时固定数量的记录,则可以使用String or int主键并分配它AssetType.FOO.name() or AssetType.FOO.ordinal()

这里的不可移植意味着某些持久性提供程序可能支持其他内容,但它可能不适用于其他提供程序。与枚举一样 - 如果持久性提供程序对其有特殊支持,则不会尝试实例化它,而是在检查是否存在后对其进行特殊处理class.isEnum(),那么它可能会起作用。但您的持久性提供者似乎没有这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用枚举作为 id 的相关文章

随机推荐

  • 我想检查此 cURL 代码中的网站是否处于活动状态?

    我使用此代码从其他服务器获取响应 结果 我想知道如何检查该网站是否处于活动状态 ch curl init http domain com curl php curl setopt ch CURLOPT POST 1 curl setopt
  • 与 Sapper 兼容的设置,可从单个 Express/Polka 入口点为多个应用程序提供服务

    我需要设置一台 Polka 或 Express 服务器 以便它可以从单个应用程序服务多个应用程序 每个主机名一个 服务器 js入口点 可以使用以下方法完成vhost中间件 https github com expressjs vhost h
  • 当 ng-if = false 时淡出动画

    有没有什么办法可以让动画淡出时ng if false 而不是立即隐藏 HTML 元素 我可以在什么时候淡入ng if true 但不能什么时候ng if false When ng if true 我在用着动画 css http daned
  • 可选参数和可选属性不支持同时使用吗?

    public void ObjTest StringBuilder sb List
  • PIL中的图像转换,pgm文件错误

    当尝试在 PIL python 库中执行以下操作时 Image open Apple gif save Apple pgm 代码失败并显示 Traceback most recent call last File home eran ecl
  • Azure Java SDK - 在上传时将块 blob 设置为冷存储层

    使用 Java SDK 将块 blob 上传到 Azure 存储时 是否可以将存储层设置为 blob 级别的 cool 我能找到的最接近的是 BlobProperties 上的 setStandardBlobTier 这是一个受保护的方法
  • 如何将表格导出为 csv 或 excel 格式

    我需要将 Oracle 表导出为 csv excel 文件格式 以及列标题 欢迎通过 cx oracle 或通过 sqlplus 解决 来自评论的Python代码 con cx connect cur con cursor printer
  • 即使设置了 date.timezone,PHP DateTime 也会引发时区警告

    我不断收到以下错误 DateTime createFromFormat 依赖系统的时区设置是不安全的 你是required使用 date timezone 设置或 date default timezone set 函数 如果您使用任何这些
  • FFmpeg 用于根据参考日期标记视频时间

    我正在尝试使用在视频中标记时间戳drawtext筛选 FFmpeg 可以轻松标记时间戳localtime gmtime甚至PTS 但是 我想为时间戳指定一个参考时间 开始时间 以表示视频播放的时间recorded 未编码 阅读文档 我发现了
  • 我可以在同一活动中使用兼容的操作栏和片段吗?

    好的 我已经将我的活动扩展到 extends ActionBarActivity 我的主菜单页面 extends FragmentActivity 当我将其更改为扩展 ActionBarActivity 以便我可以在主菜单上看到我的操作栏标
  • 如何使用前缀和每个实体的单独序列来实现 IdentifierGenerator

    我已经按照 Vlad 的基本指南来实现前缀生成器 但遇到了麻烦 目标是同时拥有 每个实体都有单独的序列 我通过注释定义的前缀 GenericGenerator我猜 所有序列都会在每次应用程序重新启动时删除并创建 重新部署 无论如何 hibe
  • 如何微调 HuggingFace BERT 模型进行文本分类 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有逐步解释关于如何微调 HuggingFace BERT文本分类模型 微调方法 有多种方法可以针对目
  • 我怎样才能在 Perl 中 sprintf 一个大数字?

    在 Windows 32 位平台上 我必须读取一些数字 这是出乎意料的 它们的值可以大到 99 999 999 999 但不能再大了 尝试去sprintf 011d myNum 它们输出溢出 2147483648 我无法使用 BigInt
  • 例如,查找下周一 6:00 的 Java 日期

    我正在尝试用 Java 创建一些代码 其中有人可以确定指定的一周中下一个重复时间的日期 这很难解释 所以我举个例子 假设现在是 3 月 1 日 星期四 用户想知道下周六 5 00 是什么时候 代码应该输出 3 月 3 日 5 00 作为日期
  • Swift 字典荒谬的内存使用情况

    我在我的一个应用程序中遇到了一个有趣的问题 当访问一个Dictionary很多时候 我的应用程序的内存使用量在几秒钟内飙升至超过千兆字节 这是一些示例代码来显示该问题 override func viewDidLoad let dictio
  • 如何从asp.net aspx页面获取当前页面源

    您好 我正在尝试使用 asp net 应用程序获取当前页面源 我找到了一段将 html 转换为 pdf 的代码 但为了将我的页面转换为 pdf 我需要获取该页面的 html 代码 我怎样才能将它们作为字符串获取 我的简单代码是这样的 str
  • 如何绘制复杂的多边形?

    我正在从 GIS 数据库读取数据并使用 mpl toolkits basemap 和 matplotlib 创建地图 一些数据创建复杂的多边形 由外环和内环定义 但是 我无法找到如何创建带孔的多边形 这对于 matplotlib 来说是可能
  • Android:我丢失了 Android 密钥存储,我该怎么办? [复制]

    这个问题在这里已经有答案了 基于我的 android 密钥库 我创建了一些应用程序 现在 我想更新我的一个程序 但我丢失了我的密钥库 我可以生成另一个并更新我的应用程序吗 Thanks 您可以创建一个新的密钥库 但 Android Mark
  • 如何自定义 ckeditor 工具栏

    我正在使用ckeditor 想要自定义工具栏和文本输入区域 因为两个句子之间的间隙很大 我无法找到应该进行更改的toolbar js 或config js 我如何自定义以上两者 索纳尔的答案本身并没有错 但是不涉及CKEDITOR FCK编
  • 使用枚举作为 id

    使用JPA 我们可以定义一个枚举作为实体的id吗 我尝试过以下方法 public enum AssetType Entity IdClass AssetType class public class Adkeys private Asset