使用私有方法

时间:2018-02-09 17:27:54

标签: java hibernate reflection

我目前正在将旧的Hibernate工具从3.2版迁移到最新版本。它的工作方式是我从 Configuration 类继承到修改后的 AutofetchConfiguration 类。我遇到了一种情况,我需要覆盖的方法之一已被改为私有方法,使我无法覆盖它。

这就是早期版本中的情况:

protected void add(XmlDocument metadataXml) throws MappingException {
    HbmBinder.bindRoot(metadataXml, createMappings(), Collections.EMPTY_MAP);
}

在这种情况下,可以轻松地进行更改以调用不同的HbmBinder:

protected void add(XmlDocument metadataXml) throws MappingException {
    AutofetchHbmBinder.bindRoot(metadataXml, createMappings(), Collections.EMPTY_MAP);
}

在我目前正在处理的版本中,在此方法中调用bindRoot-call:

private void processHbmXml(XmlDocument metadataXml, Set<String> entityNames) {
    try {
        HbmBinder.bindRoot(metadataXml, createMappings(), Collections.EMPTY_MAP, entityNames);
    } catch (MappingException me) {
        throw new InvalidMappingException(metadataXml.getOrigin().getType(), metadataXml.getOrigin().getName(), me);
    }

    for (String entityName : entityNames) {
        if (annotatedClassesByEntityNameMap.containsKey(entityName)) {
            annotatedClasses.remove(annotatedClassesByEntityNameMap.get(entityName));
            annotatedClassesByEntityNameMap.remove(entityName);
        }
    }
}

如您所见,由于private关键字,无法覆盖该方法。该方法使用我在子类中没有的变量,因此重写将调用此方法的公共/受保护方法不是一种选择。

在这种情况下,我可以做些什么来调用AutofetchHbmBinder.bindRoot吗?

0 个答案:

没有答案