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

时间:2018-12-20 14:49:36

标签: java hibernate nullpointerexception null 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;
}

这是自定义的findByID:

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

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

以下是调用getHibernateTemplate()。get(ActiveTicket.class,id)时对象的外观: enter image description here

2 个答案:

答案 0 :(得分:0)

由于恕我直言,一些相关的代码片段丢失了,所以我最好的客人是,您的Ticket / ActiveTicket / ResolvedTicket包含带有final关键字的getter。

答案 1 :(得分:0)

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