HibernateTemplate Get 方法 returns 具有空值的对象

HibernateTemplate Get method returns an object with null values

我在使用 Hibernate 时遇到了一个奇怪的问题。有两个数据库 table 存储活动和已解决的工单。在Java中有一个超级class(Ticket)和实体subclasses(ActiveTicket和ResolvedTicket)。

现在当工单被解决后,它会被移动到 ResolvedTicket table。

现在我有一个自定义的 findByID 方法,我尝试首先检索活动票证,然后如果我有一个空对象,然后我尝试检索已解决的票证。它看起来像这样:

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() 时,第一行 returns 一个包含空值的对象。它看起来像一个代理对象,但它很奇怪,因为每当我尝试调用它的任何 getter 时,我都会得到一个 NullPointerException,这很奇怪,因为在测试 t == null 时对象不为 null。

这是调用 getHibernateTemplate().get(ActiveTicket.class, id) 时对象的样子:

由于恕我直言,一些相关的代码片段丢失了,我最好的客人是你的 Ticket/ActiveTicket/ResolvedTicket 有带有 final 关键字的吸气剂。

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