JPA 单表层次结构中的 PostgreSQL 标识

2024-01-23

在具有单个表继承层次结构的 Hibernate/JPA 环境中使用 PostgreSQL 时,我看到了奇怪的行为。

首先是我的环境:

  • PostgreSQL 8.3
  • 春季2.5.6SEC01
  • Hibernate-entitymanager 3.4.0.GA(从Glassfish更新工具安装)
  • Hibernate-distribution 3.3.1.GA(通过 Glassfish 更新工具安装)
  • 玻璃鱼V2
  • Mac OS X 10.5.x

我在使用时遇到问题GenerationType of IDENTITY具有单个表继承层次结构。

这是我的两个实体:

父类.java

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="generation", discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue("Parent")
public class Parent implements Serializable {
    private static final long serialVersionUID = 1L;

    private Long id;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

孩子.java

@Entity
@DiscriminatorValue("Child")
public class Child extends Parent {
    private String babyName;

    /**
     * @return the babyName
     */
    public String getBabyName() {
        return babyName;
    }

    /**
     * @param babyName the babyName to set
     */
    public void setBabyName(String babyName) {
        this.babyName = babyName;
    }
}

DDL

create table Parent (generation varchar(31) not null
                    ,id  bigserial not null
                    ,babyName varchar(255)
                    ,primary key (id)
                    );

如果我尝试插入新的父级,则会收到错误:

org.postgresql.util.PSQLException: Bad value for type long : Parent

我将日志记录打开到 TRACE,这是输出:



TRACE TransactionSynchronizationManager - Bound value [org.springframework.orm.jpa.EntityManagerHolder@485e0366] for key [com.sun.enterprise.util.EntityManagerFactoryWrapper@a6e312b] to thread [httpSSLWorkerThread-8080-0]
Hibernate: insert into Parent (generation) values ('Parent')
SQL Error: 0, SQLState: 22003
Bad value for type long : Parent
TRACE TransactionInterceptor - Completing transaction for [com.xxx.yyy.service.MoveService.saveHuman] after exception: javax.persistence.PersistenceException: org.hibernate.exception.DataException: could not insert: [com.xxx.yyy.temp.Parent]
TRACE RuleBasedTransactionAttribute - Applying rules to determine whether transaction should rollback on javax.persistence.PersistenceException: org.hibernate.exception.DataException: could not insert: [com.xxx.yyy.temp.Parent]
  

如果我将鉴别器值更改为解析为长的值,例如123插入成功。然而 Hibernate 似乎认为这个鉴别器值是 id。所以下面的代码:

Parent p = new Parent();
service.saveHuman(p);

add(new Label("p", "p id is" + p.getId())); 

将 id 显示为123而不是主键值 1。

如果我将生成类型更改为AUTO创建了一个序列,并且插入似乎工作正常。如果我把它改成SEQUENCE并用类级注释声明序列,它再次起作用。但是根据我读过的文档,PostgreSQL 支持这两种生成类型。

我还尝试了完全相同的代码,并使用 MySQL 5.0.51b 切换了数据库。这似乎运行良好。

那么这是我的代码、方言、Hibernate 或 PostgreSQL JDBC 驱动程序中的错误吗?有什么想法可以缩小问题范围吗?任何人都可以重现这个问题,因为我已经尝试搜索但还没有看到这个确切的问题。

Note:我也问过这个问题。当然,我会将任何回复反馈给这两个网站。


我只是从上面的评论中“移植”这个解决方案...使用 PostgreSQL JDBC 驱动程序的 8.3 版本:-)。

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

JPA 单表层次结构中的 PostgreSQL 标识 的相关文章

  • spring boot框架下如何过滤tomcat产生的访问日志

    我们使用spring boot框架 通过嵌入式tomcat生成访问日志 访问日志的格式如下 server tomcat access log enabled true server tomcat access log pattern h l
  • 如何在 Spring Boot 1.4 中自定义 Jackson

    我一直无法找到如何使用的示例Jackson2ObjectMapperBuilderCustomizer java在spring boot 1 4中自定义Jackson的功能 boot 1 4 中自定义 Jackson 的 doco http
  • 通过 JDBC 调用 Sybase 存储过程时结果集为空

    我正在调用一个通过 JDBC 返回多个结果集的 Sybase 存储过程 我需要获取一个特定的结果集 其中有一列名为 结果 这是我的代码 CallableStatement cs conn prepareCall sqlCall cs reg
  • 将对象列表传递给 Freemarker 然后循环

    我已经熟悉了 FreeMarker 一个 Java 模板引擎 我已经能够通过哈希映射将对象传递给模板引擎了 这样就可以了 但是 一旦我尝试将任何类型的多个对象集传递给 FreeMarker 它就会给我一个 freemarker templa
  • 使用Optional作为类中的属性是一个好习惯吗? [复制]

    这个问题在这里已经有答案了 我读过一些关于目的的内容Optional 不幸的是我不记得在哪里 在Java 8中 我很惊讶作者没有提到使用Optional作为类中的属性 由于我在课堂上经常使用选项 我想知道这是否是一个好的做法 或者我可以更好
  • com.google.gwt.dev.jjs.InternalCompilerException:访问期间出现意外错误

    我在使用版本 2 6 0 编译 gwt 应用程序时遇到以下错误 最初我用 gwt 版本 2 6 1 的 maven 编译它 然后尝试通过版本 2 6 0 的 eclipse 编译它 跟版本兼容有关系吗 com google gwt dev
  • Apache POI 的 ProGuard 设置

    我正在构建一个使用 Apache POI 库的应用程序 当我调试应用程序 在不运行 Proguard 的情况下编译它 时 一切都运行良好 但是在导出 APK 后 当我运行应用程序并打开 Excel 文件时 出现以下异常 RuntimeExc
  • 为什么我无法解开根节点并反序列化对象数组?

    为什么我无法通过展开根节点来反序列化对象数组 import java io IOException import java util Arrays import java util List import org codehaus jack
  • 用dagger 2查看依赖注入

    我有一个自定义视图扩展TextView 我应该在哪里调用我的组件来注入视图 component inject customTextView 因此 我发现我需要在自定义视图的构造函数中添加注入 在所有视图中 或者使一个调用另一个 Exampl
  • 用 Java 捕获扬声器输出

    使用Java可以捕获扬声器输出吗 此输出不是由我的程序生成的 而是由其他正在运行的应用程序生成的 这可以用 Java 完成还是我需要求助于 C C 我有一个基于 Java 的应用程序 使用过的爪哇声音 https stackoverflow
  • 如何更改tomcat jmx密码的文件权限

    我正在尝试保护 Windows 平台上托管的本地 tomcat 实例上的 JMX 访问 我已经创建了访问权限和密码文件 并使用以下 VM 参数插入这些文件 Dcom sun management jmxremote password fil
  • 如何在 Hibernate 中左连接获取多个子项?

    我正在使用 hibernate 但在创建一个获取对象的所有子对象的 hql 查询时遇到了麻烦 例如 对象用户有一个汽车列表和一个朋友列表 为了让用户拥有他的汽车 我将使用以下查询 from User u left join fetch u
  • 使用JPanel绘制直线并获取点坐标

    我现在完全不知所措 我没有太多用 Java 构建 GUI 我一直在阅读有关 swing 和 JPanel 的所有内容 我认为我想做的事情是可能的 我只是还没有弄清楚how 我正在尝试构建一个 GUI 您可以在其中在某个绘图区域内绘制直线 我
  • Spring @Configuration如何缓存对bean的引用

    使用基于 Java 的配置时 Spring 如何防止再次调用 bar 我想知道编译时注释处理或通过代理方法 Configuration public class AppConfig Bean public Foo foo return ne
  • Java 通用问题

    下面的代码可以编译 但如果我取消注释行 它不会编译 我很困惑为什么 HashMap 确实扩展了 AbstractMap 并且声明映射的第一行可以正常编译 import java util AbstractMap import java ut
  • Java可以进行进程监控吗?

    是否可以用Java编写一个在托盘中运行的应用程序 并且当启动某个应用程序时 它可以检测到它 我想对某些程序执行此操作 以了解我每周使用它们多长时间 我是 Java 新手 所以我不知道 Java 是否是最适合此操作的语言 或者它是否具有对操作
  • Jersey bean 验证 ParameterNameProvider

    我正在阅读关于泽西岛的文档Bean验证 https jersey java net documentation latest bean validation html The ParameterNameProvider示例显示如何定义方法的
  • 带有 postgres 的 DOCKER 容器,警告:无法打开统计文件“pg_stat_tmp/global.stat”:不允许操作

    我有一个使用 yml Dockerfile 等从几个不同图像构建的 DOCKER 容器 到目前为止 一切都构建并运行良好 除了我在标题中看到的这个问题 index db 1 2021 02 22 23 18 33 388 UTC 31 WA
  • LinkedBlockingQueue 抛出 InterruptedException

    我有这段代码 ALinkedBlockingQueue应该只抛出一个Exception如果在等待添加到队列时被中断 但这个队列是无限的 所以它应该尽快添加 为什么我的关闭方法会抛出一个InterruptedException private
  • Ant 类路径和 junit.jar

    我有一个 build xml 它允许我运行 junit 测试 这是相关部分

随机推荐

  • 使用 ExecuteNonQuery() 时返回值不正确

    我正在编写一个与 SQL Server 交互的 C 程序 我愚蠢地将查询字符串硬编码到 C 程序中 并希望将它们转换为服务器上的存储过程 由于某种原因 一个特定的 INSERT 语句 工作正常 不再有效 我不明白为什么 我什至运行了 SQL
  • 如何从十进制字符串中去掉零和小数点?

    当前输出以下代码 12 1 12 100 12 1000 12 00 12 12 0000 我怎样才能改变它 让它输出 12 1 12 1 12 1 12 12 12 Math Round 似乎就是这样 但它让我定义了我想要的小数位数 但我
  • Android java 百分比位图两幅图像之间的像素差异

    我需要在Android上的java中计算两个图像之间的像素差异 问题是我的代码返回不准确的结果 例如 我有 3 张非常相似的图片 但对于每张图片的比较 它返回显着不同的结果 pic1 vs pic2 1 71 pic1 与 pic3 0 0
  • 如何使用 Prisma 加密和解密数据?

    我已经研究了几周并寻找解决方案 但找不到针对我的具体问题的解决方案 我的前提 我使用NodeJS作为后端服务器 我通过Prisma管理数据 https www prisma io https www prisma io 我的客户要求对数据库
  • 识别标记并获取与其关联的对象的典型方法是什么?

    我在我的一个应用程序中使用地图 我想知道在点击标记时获取标记的关联对象的常见 有效方法是什么 我今天的计划是这样的 首先 我使用返回的标记创建对象的 ArrayList 和这些对象的 HashMapmMap addMarker 作为索引 A
  • 如何设置NSMenu/NSMenuItems的字体?

    我不知道如何在 NSMenu 中设置 NSMenuItems 的字体 样式 我在 NSMenu 上尝试了 setFont 方法 但它似乎对菜单项没有任何影响 NSMenuItem 似乎没有 setFont 方法 我希望它们都具有相同的字体
  • CSS 动画,单击时切换旋转

    我尝试让下面的插入符号在单击下拉菜单时旋转 180 度 在我尝试实现的解决方案中 它将插入符的类更改为单击时向上切换或向下切换 我第一次点击它时它会向上旋转 第二次它会立即返回到起始位置 然后再向上旋转 我闻到了脏代码的味道 添加此切换旋转
  • 在 ConstraintValidator 中注入服务 [Bean Validator - JSR 303] Spring

    下午好 我在 Bean Validator JSR 303 中注入服务时遇到问题 我将执行验证 但我需要验证数据库中的此记录 当我使用我的服务时 它抛出 NullPointerException 例外 Exception in thread
  • Ruby、RSVG 和 PNG 流

    我正在尝试在 Rails 应用程序中将图像从 SVG 转换为 PNG ImageMagick 不适合我 因为 Heroku 此时无法 想要升级 IM 我正在测试在开发中使用 RSVG2 Cairo 的一些想法 但遇到了障碍 我可以轻松地将
  • 将 ÆØÅ 等特殊字符读入 R (Rstudio)

    我正在尝试读取包含用挪威语编写的调查问卷数据的 CSV 文件 所以这个文件包含字母 但是 R 似乎不能很好地处理这些字母 它们都显示为问号 我用它来读取数据 data lt read csv2 Responser Vasket 20 06
  • 当我在 Visual Studio 2005 中保存文件时是否可以运行宏?

    当我在 Visual Studio 2005 中保存文件时 我希望还运行一个更新版权的宏 通过正则表达式搜索和替换 我对正则表达式并不陌生 但对 VB VBA 和 Visual Studio 宏很陌生 所以我具体需要帮助的是 让宏在保存时运
  • Java,具有同步方法的多线程

    有时我在让我的程序不陷入僵局时遇到一些麻烦 我想我需要添加第三个同步方法release 它可用于在调用ping后释放另一个线程 代码如下 Attempt at a simple handshake Girl pings Boy gets c
  • Angular - 模块没有导出成员“OpaqueToken”错误

    我应该如何解决这个错误 node modules ngrx store src ng2 d ts 1 10 中的错误 错误 TS2305 模块 C Users sandr Desktop wz r kopia node modules an
  • 开发了 strtok 替代品

    我开发了自己的 strtok 版本 只是为了练习指针的使用 任何人都可以看到这有任何限制 或者无论如何我可以改进 void stvstrtok const char source char dest const char token Sea
  • 许多控件的 Keydown 处理程序

    有没有更好的方法为繁忙表单上的许多控件提供按键处理程序 在某些情况下 单独使用表单处理程序是行不通的 Private Sub rText KeyDown ByVal Sender As Object ByVal e As KeyEventA
  • 将 NSInteger 转换为 NSUInteger?

    我正在尝试将 NSInteger 转换为 NSUInteger 我用 google 搜索了它 但没有找到真正的答案 我该怎么做 NSInteger and NSUInteger只是原始整数类型的 typedef if LP64 NS BUI
  • Google 脚本选择 Google 电子表格中的整行

    我想知道我们是否可以使用 Google 脚本在电子表格中选择一行 如下所示 无论如何 首先我尝试使用此功能来处理列 但我收到数据错误 未找到 如果您有一个想法 function testGetFullColumn getFullColumn
  • 为什么使用类而不是函数? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我确实知道类的一些优点 例如变量和函数作用域 但除此之外 对我来说 拥有一组函数似乎比拥有许多类的实例和抽象更容易 那么为什么将相似的函数分组在
  • 关于C++中const指针的问题?

    我无法解释以下代码 double d 100 double const d1 30 double const p d Line 1 double const p1 d1 Line 2 在上面的代码中 Line 1没问题 但是Line 2产生
  • JPA 单表层次结构中的 PostgreSQL 标识

    在具有单个表继承层次结构的 Hibernate JPA 环境中使用 PostgreSQL 时 我看到了奇怪的行为 首先是我的环境 PostgreSQL 8 3 春季2 5 6SEC01 Hibernate entitymanager 3 4