我目前正在将旧的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吗?