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

Fir*_*rre 5 java null hibernate nullpointerexception javassist

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

现在,当票证被解析后,它将被移动到ResolvedTicket表.

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

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

这是自定义的findByID:

public <C> C findByID(Class<C> class, PK id) {
    return (C) getHibernateTemplate().get(class, id);
}
Run Code Online (Sandbox Code Playgroud)

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

这是调用getHibernateTemplate().get(ActiveTicket.class,id)时对象的外观: 在此输入图像描述

Fir*_*rre 0

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