带有继承的 JPA ManyToOne 映射

2023-12-31

我有几个具有共同属性的实体,因此提取了共同参数,如下面的代码片段。

@MappedSuperclass()
public class BaseCustomerDemographicDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    protected long id;

    @ManyToOne
    @JoinColumn(name = "GROUP")
    protected Group group;

}

实体片段如下。

@Entity
@Table(name = "INDIVIDUAL_CUSTOMER")
@Access(AccessType.FIELD)
public class IndividualCustomer extends BaseCustomerDemographicDetails {

    @NotNull
    @Embedded
    private PersonalInformation personalInformation;

    @Column(precision = 16, scale = 2)
    private BigDecimal annualIncome;

    private Boolean vip;

    private Boolean isStaff;

...
}

    @Entity
    @Access(AccessType.FIELD)
    @Table(name = "GROUP")
    public class Group {

        protected Group(){}

        @Id
        @NotNull
        @Column(name = "GROUPID")
        private String groupId;

        @NotNull
        @Column(name="GROUPNAME")
        private String groupName;

        @OneToMany(fetch = FetchType.LAZY, mappedBy = "group")
        private List<BaseCustomerDemographicDetails> customerDemographicDetails;

    }

相同的 OneToMany 映射会在 statrtup 期间导致 Hibernate 异常,如下所示。

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
 at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1249)
 at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:120)
 at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:860)
 at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
 at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425)
 at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849)
 at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
 at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343)
 at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:319)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
 ... 16 common frames omitted
Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: xx.xxx.xxxxxxx.xxxxxxxxx.domain.model.Group.customerDemographicDetails[xx.xxx.xxxxx.xxxxxxx.domain.model.BaseCustomerDemographicDetails]
 at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1135)
 at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:794)
 at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:729)
 at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:70)
 at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1697)
 at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1426)
 at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
 at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857)
 ... 24 common frames omitted

是不是这样@MappedSuperclass http://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html应该使用吗?


您无法将关系映射到@MappedSuperclass。请查看参考文档here https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/chapters/domain/inheritance.html. @MappedSuperclass允许您仅在域模型中实现继承。从数据库的角度来看,这使其成为一个实现细节。@MappedSuperclass可以轻松地将公共字段和注释分组到通常抽象的超类中,但您无法与其建立关系。

如果你使用@Inheritance,您可以摆脱此映射(请注意,我必须将 GROUP 更改为其他内容,因为它是大多数数据库中的保留字):

BaseCustomerDemographicDetails.java

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity(name = "BaseCustomerDemographicDetails")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class BaseCustomerDemographicDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    protected long id;

    @ManyToOne
    @JoinColumn(name = "GROUP_OF_CUSTOMERS")
    protected Group groupOfCustomers;

}

组.java

import java.util.List;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

@Entity
@Access(AccessType.FIELD)
@Table(name = "GROUP_OF_CUSTOMERS")
public class Group {

    protected Group() {
    }

    @Id
    @NotNull
    @Column(name = "GROUPID")
    private String groupId;

    @NotNull
    @Column(name = "GROUPNAME")
    private String groupName;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "groupOfCustomers")
    private List<BaseCustomerDemographicDetails> customerDemographicDetails;

}

individualCustomer.java(无变化)

import java.math.BigDecimal;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Entity;

@Entity
@Access(AccessType.FIELD)
public class IndividualCustomer extends BaseCustomerDemographicDetails {

    @NotNull
    @Embedded
    private PersonalInformation personalInformation;

    @Column(precision = 16, scale = 2)
    private BigDecimal annualIncome;

    private Boolean vip;

    private Boolean isStaff;

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

带有继承的 JPA ManyToOne 映射 的相关文章

  • Android 2.2 SDK - Droid X 相机活动无法正常完成

    我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同 在 Droid 和 Nexus One 上选择 确定 后 活动将完成 Droid X 有一个 完成 按钮 它将带您返回
  • 禁用 Eclipse Java 调试器的热代码替换 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Eclipse 中禁用热代码替换 https stackoverflow com questions 2594408 how do i disable hot code replace in
  • 如果在睡眠线程上调用interrupt()会发生什么?

    我有一个线程 然后run I call sleep 如果我中断这个线程会发生什么 MyThread extends Thread public void run try sleep 1000000 catch InterruptedExce
  • Spring安全“记住我”cookie在第一个请求中不可用

    我无法在登录请求后检索 Spring 记住我 cookie 但它在对受保护页面的下一个请求中工作正常 谁能告诉我怎样才能立即得到它 我在登录请求中设置了记住我的 cookie 但在 Spring 重定向回原始 受保护的 url 后无法检索它
  • eclipse中导入项目文件夹图标

    我在 Eclipse 工作区中新导入的 Maven 项目有J and M项目文件夹顶部的图标 项目和包资源管理器 而其他导入的 Maven 项目只有一个J icon 有人可以解释其中的区别吗 该项目有J装饰器被称为 Java 项目和具有M装
  • 在文本文件中搜索单词并返回其频率

    如何在包含单词文本的文本文件中搜索特定单词并返回其频率或出现次数 使用扫描仪 String text Question how to search for a particular word in a text file containin
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • 隐式超级构造函数 Person() 未定义。必须显式调用另一个构造函数?

    我正在开发一个项目 但收到错误 隐式超级构造函数 Person 未定义 必须显式调用另一个构造函数 我不太明白它 这是我的人物课程 public class Person public Person String name double D
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 如何将 Jfreechart(饼图)添加到 netbeans 的面板中

    我正在使用 netbeans gui 编辑器 并且正在尝试添加一个本身位于内部框架中的 Jfreechart 并且这个内部框架我想将其添加到面板中 正如您在此图中看到的那样 抱歉 我无法直接发布图像 因为我新手 http www flick
  • 获取给定类文件的目录路径

    我遇到的代码尝试从类本身的 class 文件所在的同一目录中读取一些配置文件 File configFiles new File this getClass getResource getPath listFiles new Filenam
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • Java - 返回值是否会中断循环?

    我正在编写一些基本上遵循以下格式的代码 public static boolean isIncluded E element Node
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • 哪个集合更适合存储多维数组中的数据?

    我有一个multi dimensional array of string 我愿意将其转换为某种集合类型 以便我可以根据自己的意愿添加 删除和插入元素 在数组中 我无法删除特定位置的元素 我需要这样的集合 我可以在其中删除特定位置的数据 也
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部

随机推荐

  • IIS7 中的“经典”和“集成”管道模式有什么区别?

    昨晚我正在部署一个 ASP NET MVC 应用程序 发现将 IIS7 设置为集成模式进行部署会减少工作量 我的问题是有什么区别 使用其中一种或另一种会有什么影响 经典模式 IIS6及以下版本中的唯一模式 是IIS仅直接与ISAPI扩展和I
  • R包中的源文件

    我正在构建一个非常基本的 R 包供我自己使用 有些文件需要另一个文件中的函数 因此 R 文件尝试获取 R 文件 这在构建过程中失败 两者都不 source util R nor source util R 工作 R 找不到该文件 所有文件都
  • 无法在 Android Nougat 通知的小图标中使用黄色

    我在 Android 7 x 中将通知小图标设置为黄色时遇到问题 我在用着notification setColor Color YELLOW 在构建通知对象时 它显示橄榄色而不是黄色 也尝试过使用notification setColor
  • RxJava 的后备 Observable

    我正在寻找一种更好的方法来实现使用 RxJava 时针对空结果的简单 Observable 后备系统 这个想法是 如果对一组数据的本地查询导致零项 则应该进行回退查询 可能是网络调用或其他查询 目前 我的代码包含以下内容 Observabl
  • WCF XML 结构 - 如何删除包装器节点?

    我在使用 List 对象时遇到问题 DataContract public class Recipe DataMember Name Allergies public List
  • AttributeError:类型对象“MyUser”没有属性“USERNAME_FIELD”

    我正在 django 中构建一个自定义 User 类 用于创建注册应用程序 每次尝试 makemigrations 时 我都会收到上述错误 据我所知 我的代码是根据 django 文档here https docs djangoprojec
  • 对 socket.io 使用 http 和 https

    我正在努力使socket io两者都工作http and https连接 但根据我当前的配置 它似乎只能在其中之一上工作 使用以下配置选项 它可以通过以下方式访问我的应用程序https 但是当尝试通过访问它时http它无法连接并且我收到错误
  • 反转字符串中单词的顺序

    我正在准备初级工作面试 我试图反转字符串中单词的顺序 但我的输出是一堆毫无意义的垃圾 我认为问题可能是因为我在函数中使用 char 无论如何 这是我的代码 include
  • .NET 4.8 中的异步等待递归导致 StackoverflowException(.Net Core 3.1 中没有!)

    为什么下面的代码在 Net4 8中只有17深度递归会导致StackOverflowException 然而 这在 NetCore 3 1 中不会发生 我可以将计数设置为 10 000 它仍然有效 class Program static a
  • 为什么除了“goog.inherits()”之外还需要“goog.base(this)”?

    在这段涉及构造函数的 Google Closure javascript 代码片段中 为什么是goog base this 必要的 没有Foo已经从 Disposable 继承goog inherits foo goog Disposabl
  • 只读具有值的 Excel 单元格 python win32com

    我有一个如下所示的 Excel 文档 num value1 value2 1 A 100 2 B 3 c 300 我想迭代value2对于值超过 200 的值 如果发现值超过 200 则打印value1 我遇到的最大问题是告诉它在到达包含文
  • 如何通过 colab.research 上的 conda 构建库?

    所以我想用python occ图书馆 这个需要conda forge待建 我尝试将其安装在基本笔记本 https colab research google com notebooks welcome ipynb scrollTo qtrm
  • 添加文本到列表输出

    我需要对使用 Powershell 获取的文件列表进行格式化 添加文本 我可以简单地使用以下脚本来获取我的文件列表 Get ChildItem c path where Length eq 0 select name 这可以很好地返回文件名
  • 可以在 if 语句中使用 2 个或多个 OR 条件吗? [复制]

    这个问题在这里已经有答案了 在论坛上提问之前 我尝试自己测试一下 但我的简单代码来测试它似乎不起作用 include
  • perl 中不带参数的 split

    我是perl新手 我想知道这行代码是什么意思 q dummy d v split 我通过谷歌搜索 但我没有找到使用 split 不带参数的解释 这种用法与 while 块有关吗 完整的代码片段是 open T opt judgments d
  • 用于获取智能卡序列号的 APDU 命令

    如何使用 APDU 命令获取智能卡的序列号 我尝试使用 SCardGetAttrib 函数来查询它winscard dll不幸的是 我被告知使用 APDU 命令来执行此操作 因为没有标准方法来获取序列号 问题是我无法弄清楚我的智能卡是什么类
  • 从 Perl 或 Python 解析 Java 类

    我想要获取一个 java 文件 识别文件中的第一个类 并从该类中获取有关注释 方法和属性的信息 两种语言中是否有任何模块已经做到了这一点 我也可以构建一个简单的正则表达式来执行此操作 但我不知道如何在正则表达式中识别指示类 方法结束的大括号
  • 删除CSS @media打印规则而不修改CSS文件[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我将引导 CSS 文件添加到我的页面 我不想修改 CSS 文件 当我尝试打印页面时 引导程序修改介质以打印样式并删除所有颜色属性 如何
  • Windows 10 Home 上的 Docker Desktop 3.2.2 崩溃,并显示错误“连接期间出错:此错误可能表明 docker 守护进程未运行”

    我正在运行的 docker 容器似乎在我的 macbook 上运行良好 但是当在我的 Windows 10 家用电脑上运行时 Docker 引擎将会崩溃 当我尝试使用 Docker CLI 时 它将无法连接并声称 docker 未运行 即使
  • 带有继承的 JPA ManyToOne 映射

    我有几个具有共同属性的实体 因此提取了共同参数 如下面的代码片段 MappedSuperclass public class BaseCustomerDemographicDetails Id GeneratedValue strategy