diff --git a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/panel/references/ReferencesResultsContainer.java b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/panel/references/ReferencesResultsContainer.java index 489658a94ce27ec2765b28cc74c488eb3de207dd..9ed23bfa74204fe4235a5a3f87ce3a7ec0935d62 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/panel/references/ReferencesResultsContainer.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/panel/references/ReferencesResultsContainer.java @@ -63,6 +63,15 @@ class ReferencesResultsContainer implements IResultSetContainer { private ResultSetViewer dataViewer; private DBSDataContainer parentDataContainer; + + /** + * Result of the toString() call on the latest parentDataContainer. It is used for detection if the underlying data container has changed. + * See this ticket. + * + */ + @Nullable + private String parentContainerStringDigest; + private DBSDataContainer dataContainer; private final List referenceKeys = new ArrayList<>(); @@ -164,10 +173,11 @@ class ReferencesResultsContainer implements IResultSetContainer { return mainComposite; } - public void refreshReferences() { + void refreshReferences() { dataViewer.resetHistory(); - DBSDataContainer newParentContainer = this.parentController.getDataContainer(); - if (newParentContainer != parentDataContainer) { + DBSDataContainer newParentContainer = parentController.getDataContainer(); + String newParentContainerDigest = newParentContainer != null ? newParentContainer.toString() : null; + if (newParentContainer != parentDataContainer || !Objects.equals(newParentContainerDigest, parentContainerStringDigest)) { refreshReferenceKeyList(); } else if (dataContainer != null) { refreshKeyValues(false); @@ -193,8 +203,11 @@ class ReferencesResultsContainer implements IResultSetContainer { parentDataContainer = parentController.getDataContainer(); if (parentDataContainer == null) { + parentContainerStringDigest = null; return; } + parentContainerStringDigest = parentDataContainer.toString(); + Set allEntities = new LinkedHashSet<>(); for (DBDAttributeBinding attr : visibleAttributes) { DBSEntityAttribute entityAttribute = attr.getEntityAttribute();