JPA - 我可以使用 @DiscriminatorValue 创建一个没有自己的表的实体类吗?

2024-01-25

我使用带有联合继承的 JPA 和如下所示的数据库结构:

ACTION
---------
ACTION_ID
ACTION_MAPPING_ID
ACTION_TYPE

DELIVERY_CHANNEL_ACTION
--------------------------
ACTION_ID
CHANNEL_ID

OVERRIDE_ADDRESS_ACTION
--------------------------
ACTION_ID
(various fields specific to this action type)

因此,用简单的英语来说,我有多种不同类型的操作,所有操作都共享一个 ACTION_MAPPING,它是从“父”ACTION 表引用的。 DELIVERY_CHANNEL_ACTION 和 OVERRIDE_ADDRESS_ACTION 都有自己的额外补充数据,并通过 FK 映射到 ACTION。

现实世界中,我也有一个“抑制”操作,但是它自己没有任何补充数据,因此它没有相应的表 - 它需要的只是一个 ACTION_MAPPING,它存储在 ACTION 表中。

我正在从头开始创建一个新项目,因此我可以做的事情非常灵活,但显然希望从一开始就做好!

我当前的实现有效,具有三个松散定义的实体,如下所示:

@Entity
@Table(name="ACTION")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorValue("SUPPRESS")
public class Action

@Entity
@Table(name="DELIVERY_CHANNEL_ACTION")
@DiscriminatorValue("DELIVERY_CHANNEL")
public class DeliveryChannelAction extends Action

@Entity
@Table(name="OVERRIDE_ADDRESS_ACTION")
@DiscriminatorValue("OVERRIDE_ADDRESS")
public class OverrideAddressAction extends Action

也就是说 - 我有一个具体的基类 Action,具有 Joined 继承策略。 DeliveryChannelAction 和 OverrideAddressAction 都扩展了 Action。

但这里感觉不对的是,我的 Action 类是这两个操作的基类,但也形成了抑制操作的具体实现。

目前这可行,但在某些时候可能会添加更多操作,并且其中一些操作(例如 SUPPRESS)很可能没​​有补充数据,这将开始变得困难!

所以......在对象模型世界中,我想做的就是让 Action 变得抽象,并创建一个 SuppressAction 类,除了 @DiscriminatorValue("SUPPRESS") 之外,该类是空的。

我已经尝试完全按照上面描述的操作,因此,将操作更改为:

@Entity
@Table(name="ACTION")
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Action

并创建:

@DiscriminatorValue("SUPPRESS")
public class SuppressAction extends Action

但运气不好 - 它似乎对于 DeliveryChannelAction 和 OverrideAddressAction 工作得很好,但是当我尝试创建 SuppressAction 并保留它时,我得到:

java.lang.IllegalArgumentException: Object: com.mypackage.SuppressAction[actionId=null] is not a known entity type.
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4147)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:368)
    at com.mypackage.test.util.EntityTestUtil.createSuppressAction(EntityTestUtil.java:672)
    at com.mypackage.entities.ActionTest.testCRUDAction(ActionTest.java:27)

我认为这是由于 SuppressAction 没有注册为实体,但我不知道如何才能做到这一点,因为它没有关联的表。

任何指示,无论是完整的答案还是谷歌的提示(我没有想法!),非常欢迎。


你可以,与InheritanceType.SINGLE_TABLE http://java.sun.com/javaee/5/docs/api/javax/persistence/InheritanceType.html#SINGLE_TABLE

有多种方法可以为不同的分支提供多种继承类型。看到这个问题 https://stackoverflow.com/questions/1825676/changing-the-inheritance-strategy-in-branches-of-the-class-hierarchy-via-jpa-anno.

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

JPA - 我可以使用 @DiscriminatorValue 创建一个没有自己的表的实体类吗? 的相关文章

  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s

随机推荐

  • 如何修复非法指令(核心转储)

    您好 我正在尝试解决此问题 当我运行下面的 python3 Brain py 时 出现此错误 非法指令 核心转储 from imageai Prediction import ImagePrediction import os execut
  • 生产中的 Create-React-App:找不到路由

    我有一个以 Create React App 和 Express js 作为后端的全栈应用程序 开发设置 CRA 在端口 3000 上运行 是由 CRA 的代理实现的 因此我可以将某些路由直接转发到后端 在端口 5000 上运行 proxy
  • 通过notifyDataSetChanged() 没有更改/黑屏;

    我想做这样的事情 同时按下refresh按钮 它将刷新列表 活动代码如下 adapter new TweetAdapter Welcome this tweets users tweetsList setAdapter adapter pr
  • 这个语法是什么意思? (序言)

    我一直在尝试学习 Prolog 并在一些示例代码中遇到了这种语法 solve Hs Hs member h dog Hs 这只是代码的一部分 但我对h dog does 任何帮助将不胜感激 下划线 只是表明该位置有一个值 但我们不关心它 第
  • 使用 BeginInvoke 和 EndInvoke 时,如何避免必须传递/存储委托?

    Edit 将实际问题移至顶部 Update 找到了微软的一个例子 最后添加了一些代码 我的问题是 在同一个委托实例上调用多个 BeginInvoke 调用是否安全 或者我是否必须为每个正在进行的方法调用构造一个新的委托实例 如果我必须为每个
  • Java 8 扩展流

    我正在尝试扩展 Java 8 的 Stream 实现 我有这个界面 public interface StreamStuff
  • git pull 导致“文件取消链接失败”错误

    我正在尝试做一个git pull我遇到了可怕的 取消文件 xxx 链接失败 错误 我已经尝试过 ProcessExplorer 中定义的this https stackoverflow com a 6076796 341611回答 使用 f
  • 访问 ActiveDirectory 的代码的单元测试

    对访问 ActiveDirectory 的应用程序进行单元测试和 或模拟对 AD 的依赖关系的最佳方法是什么 所有必需的类型 例如DirectorySearcher and DirectoryEntry看起来并不容易被嘲笑 我们有类似的方法
  • 使用 htaccess 文件删除 html 扩展名

    我知道这是一个非常常见的话题 但没有一个解决方案适合我 我尝试过几个答案 answer 1 https stackoverflow com questions 15728888 how do i remove html extensions
  • C++ 指针数组:删除还是删除[]?

    考虑以下代码 class Foo Monster monsters 6 Foo for int i 0 i lt 6 i monsters i new Monster virtual Foo 什么是正确的析构函数 this Foo Foo
  • 使用C打开目录

    我接受通过命令行输入的路径 当我做 dir opendir args 1 它不会进入循环 即dir null 如何将命令行输入传递给 dir 指针 void main int c char args DIR dir struct diren
  • 从 IzPack 调用 Java 类

    如何从 IzPack 调用 Java 类的方法 静态方法是可以的 我需要能够传递参数 谢谢你 背景资料 我正在尝试编写一个 IzPack 安装程序 它能够检测以前安装的应用程序版本 在发现它并不真正支持此功能 Windows 除外 后 我认
  • SQLite 删除查询不起作用?

    我有以下代码来从名为 posts 的表中删除一行 由于某种原因 该帖子没有被删除 我还尝试通过命令行手动管理命令 效果很好 我也确信 post id 是正确的并且不为空 因为我也尝试过将其传回并打印它并且 ID 显示正确 我应该提到它不会吐
  • Pandas:在每 60 秒的 bin 中仅保留第一行数据

    在 pandas 中仅保留每 60 秒数据箱的第一行的最佳方法是什么 即对于在增加的时间发生的每一行t 我想删除所有出现的行t 60秒 我知道有一些组合groupby first 我可能可以使用 但是我见过的代码示例 例如使用pandas
  • TFSBuild/MSBuild 和项目参考与文件参考

    我们有一个使用项目引用的大型 VS 解决方案 该解决方案由 TFS Build 构建 如下所示 Solution Project 1 Project 2 Project Project N 由于解决方案太大 我们有几个日常使用的较小解决方案
  • 如何显示 tiff 图像?

    我完全迷失了 我需要一些人来指导我 我看过很多帖子 但没有解释如何显示 tif 图像 我在哪里可以找到一些教程 如果可能的话 我需要从一开始 或者如果你能帮助我那就太好了 我只是一个持有图像的新手 我使用 mvc 4 正如您可能发现的那样
  • 命令提示符中“cls”之后但不在“cls”之前的彩色文本

    我有一个 python 程序 我试图在命令提示符中使用 ANSI 代码以彩色文本打印 Hello 当我正常打印时 它不起作用 它只是打印 和文本 但是当我在清除命令提示符后打印它时 它工作正常 有人可以解释一下这种奇怪的性质吗 我搜索了这个
  • 单个 TextView 中的多个 TypeFace

    我想将第一个字符设置为TextView with a TypeFace以及具有不同类型面孔的第二个角色 依此类推 我读过这个例子 Spannable str Spannable textView getText str setSpan ne
  • 在 Symfony2 中测试文件上传

    在 Symfony2 文档中 它给出了一个简单的示例 client gt request POST submit array name gt Fabien array photo gt path to photo 模拟文件上传 然而 在我的
  • JPA - 我可以使用 @DiscriminatorValue 创建一个没有自己的表的实体类吗?

    我使用带有联合继承的 JPA 和如下所示的数据库结构 ACTION ACTION ID ACTION MAPPING ID ACTION TYPE DELIVERY CHANNEL ACTION ACTION ID CHANNEL ID O