当前位置: 首页 > 知识库问答 >
问题:

HibernateTemplate Get方法返回一个具有空值的对象

贺子昂
2023-03-14

我在Hibernate中遇到了一个奇怪的问题。有两个数据库表存储活动票据和已解析票据。在Java中有一个超类(Ticket)和实体子类(ActiveTicket和ResolvedTicket)。

现在,当解析票据时,它将被移动到ResolvedTicket表。

现在我有了一个定制的findByID方法,我尝试首先检索活动票据,然后如果我有一个null对象,那么我尝试检索已解析票据。看起来是这样的:

public Ticket findByID(Long id) {
    Ticket t = findByID(ActiveTicket.class, id);
    if (null == t) {
        t = findByID(ResolvedTicket.class, id);
    }
    return t;
}

这是自定义findByID:

public <C> C findByID(Class<C> class, PK id) {
    return (C) getHibernateTemplate().get(class, id);
}

在我的示例中,数据库中存储了一个ResolvedTicket,当我在第一个代码段中调用findByID()时,第一行返回一个包含空值的对象。它看起来像一个代理对象,但非常奇怪,因为每当我尝试调用它的任何getter时,都会得到一个NullPointerException,这很奇怪,因为在测试t==null时,对象不是null。

共有2个答案

嵇俊德
2023-03-14

问题出在Hibernate的版本上。升级到Hibernate的更高版本后,这个问题就消失了。

闾丘卓
2023-03-14

因为我发现一些相关的代码片段丢失了,所以我的最佳嘉宾是您的Ticket/ActiveTicket/ResolvedTicket有带有final关键字的getter。

 类似资料:
  • 我有一个PySpark Dataframe,它有两列(,,其类型为),其值为或。我正在尝试添加一个新列,这是这两个列的总和。我遵循Pyspark中的示例:在UDF中传递多列 这显示了一系列的< code>NULL,而不是我期望的结果。 我尝试了以下任何一种方法,以查看数据类型是否存在问题 仍然得到空值。 我试着移除阵列: 这可以正常工作并显示 我试着移除UDF,但是离开了阵列: 这可以正常工作并显

  • 在调试中,我得到visitreport.size()=27(即正确的记录计数),但是 visit.getValue()对于每行都是空值,尽管每个行的这个字段中没有空值。怎么了?

  • 问题内容: 我有一个文件夹,其中包含index.js和几个模型(类)index.js book.js author.js 问题在于Author类似乎找不到书!它只是一个空对象。但是,如果我在index.js中切换导出,则将Book放在Author之后- 可以,但是其他模型将停止工作。 我不想做任何骇客工作。 问题答案: 这是因为您具有循环依赖关系。Node.js以非常特定的方式处理此问题: 第一个

  • 问题内容: 我目前正在使用一个小型框架来收集OSGi系统中的指标。它的核心是注释@Metric,它指示服务的给定方法可以在被询问时传递指标(例如,数值)。 这些方法看起来像: 要么 我正在使用反射来检查服务实现类并注册带有注释的方法。作为健全性检查,我正在检查该方法确实提供了一个数值。我尝试了这个但失败了: 然后,稍后在处理器上,我将执行以下操作: 事实证明,对于原始类型,您将得到例如,并且它不能

  • 我的业务规则是,如果第一个、最后一个和中间字段都相等,或者如果第一个和最后一个字段相等,并且其中一个(或两个)对象的中间字段为null,则两个Name对象被视为相等。 因此,在为我的Name类实现hash和equals方法时,我可以使用这样的用例:equals为两个对象返回true,但这两个对象的hash返回不同的值(因为一个对象的middle值为null值,而另一个对象的middle值为null

  • 在get方法中尝试在springboot中按id查找行时,收到一个空值。我在这里对数据库的调用是否有误? 存储库- 服务- 控制器-