相关疑难解决方法(0)

JPA Query返回空值 - 具有空列的Composite Key

我有一个遗留数据库(实际上是Cobol文件),我使用Hibernate/JPA的专有JDBC驱动程序访问.

实体有一个包含2列的复合主键:CODESITE.

在传统的数据存在针对相同的记录CODE是可以有一个特定的值SITE,或者可以有与空记录SITE柱代表"所有网站".这个文件的理论是,如果你找不到CODE特定的,SITE那么你在SITE('catch-all')中查找带有NULL的记录.

我不能改变这个'表'的结构,因为它将涉及重写我们不想做的传统Cobol系统的大部分.我也无法创建数据视图.

现在,当我em.find使用包含特定code和null 的主复合键类时site,Hibernate正确地在列中找到具有NULL值的匹配记录 - 一切都好!

但是,如果我尝试使用em.createQuery类似于以下内容进行查询:

SELECT x FROM TareWeight x WHERE x.pk.code = 'LC2'
Run Code Online (Sandbox Code Playgroud)

如果有2条记录,它会在结果列表中为SITE列中的NULL返回一个空对象.

如果我使用Hibernate用于此查询的SQL,那么'database'将返回两条记录,一条记录具有NULL站点,另一条记录具有特定站点.似乎当Hibernate从这些结果加载实体时,它将它映射到空Entity对象.

所以要么Hibernate支持它,要么它不支持它.为什么em.find工作而不是em.createQuery

我知道这个问题很相似,但答案似乎表明这是不可能的.但显然Hibernate可以正确地进行查找,那么为什么查询不起作用呢?


编辑:好的,所以我NullableStringType这个Hibernate JIRA问题上找到了一个类定义,并将它添加到我的项目中.

如果我使用这个类型类在PK @Typesite列上添加一个定义,那么我可以成功地从SELECT查询中获取非空实体,该site字段包含我定义的任何String文本作为其表示null.

但是,它仍然表现不同.所述find返回一个实体与所述site字段包含null,但该查询返回的实体与site包含"南"(的默认表示字段null …

java sql hibernate jpa composite-primary-key

10
推荐指数
1
解决办法
3470
查看次数

JPA复合键可为空的列

我正在使用Hibernate的JPA impl对某些表进行建模。我在映射表时遇到了麻烦:

  • 没有主键
  • 在4列上具有唯一索引,其中3列可以为空

我试图破解它并将索引定义为复合ID,但是由于某些列可为空,因此无法正常工作。JPA / Hibernate有可能吗?

谢谢

java hibernate jpa composite-id

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

hibernate ×2

java ×2

jpa ×2

composite-id ×1

composite-primary-key ×1

sql ×1