我在使用 Hibernate 时遇到了一个奇怪的问题。有两个数据库表存储 Activity 和已解决的工单。在 Java 中有父类(super class) (Ticket) 和实体子类 (ActiveTicket 和 ResolvedTicket)。
现在,当工单被解决后,它会被移动到 ResolvedTicket 表中。
现在我有一个自定义的 findByID 方法,我尝试首先检索 Activity 票证,然后如果我有一个空对象,那么我尝试检索已解决的票证。它看起来像这样:
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。
这是调用 getHibernateTemplate().get(ActiveTicket.class, id) 时对象的样子:
最佳答案
由于恕我直言,一些相关的代码片段丢失了,我最好的客人是你的 Ticket/ActiveTicket/ResolvedTicket 有带有 final 关键字的 getter。
关于java - HibernateTemplate Get 方法返回具有空值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53870949/