Excessive Hibernate warnings when processing conditional create and delete operations on referenced resources in a transaction bundle - fix

This commit is contained in:
volodymyr 2024-11-15 17:53:24 -07:00
parent a4a1f09c21
commit 0a2bd027e4
1 changed files with 19 additions and 5 deletions

View File

@ -31,6 +31,7 @@ import jakarta.persistence.Id;
import jakarta.persistence.Index;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.PostLoad;
import jakarta.persistence.Table;
import jakarta.persistence.Temporal;
import jakarta.persistence.TemporalType;
@ -97,6 +98,9 @@ public class ResourceLink extends BaseResourceIndex {
foreignKey = @ForeignKey(name = "FK_RESLINK_TARGET"))
private ResourceTable myTargetResource;
@Transient
private ResourceTable myTransientTargetResource;
@Column(name = "TARGET_RESOURCE_ID", insertable = true, updatable = true, nullable = true)
@FullTextField
private Long myTargetResourcePid;
@ -141,7 +145,7 @@ public class ResourceLink extends BaseResourceIndex {
}
public String getTargetResourceId() {
if (myTargetResourceId == null && myTargetResource != null) {
if (myTargetResourceId == null && getTargetResource() != null) {
myTargetResourceId = getTargetResource().getIdDt().getIdPart();
}
return myTargetResourceId;
@ -184,11 +188,21 @@ public class ResourceLink extends BaseResourceIndex {
return b.isEquals();
}
/**
* ResourceLink.myTargetResource field is immutable.Transient ResourceLink.myTransientTargetResource property
* is used instead, allowing it to be updated via the ResourceLink#copyMutableValuesFrom method
* when ResourceLink table row is reused.
*/
@PostLoad
public void postLoad() {
myTransientTargetResource = myTargetResource;
}
@Override
public <T extends BaseResourceIndex> void copyMutableValuesFrom(T theSource) {
ResourceLink source = (ResourceLink) theSource;
mySourcePath = source.getSourcePath();
myTargetResource = source.getTargetResource();
myTransientTargetResource = source.getTargetResource();
myTargetResourceId = source.getTargetResourceId();
myTargetResourcePid = source.getTargetResourcePid();
myTargetResourceType = source.getTargetResourceType();
@ -331,7 +345,7 @@ public class ResourceLink extends BaseResourceIndex {
}
public ResourceTable getTargetResource() {
return myTargetResource;
return myTransientTargetResource;
}
/**
@ -348,8 +362,8 @@ public class ResourceLink extends BaseResourceIndex {
retVal.myTargetResourceType = myTargetResourceType;
if (myTargetResourceId != null) {
retVal.myTargetResourceId = myTargetResourceId;
} else if (myTargetResource != null) {
retVal.myTargetResourceId = myTargetResource.getIdDt().getIdPart();
} else if (getTargetResource() != null) {
retVal.myTargetResourceId = getTargetResource().getIdDt().getIdPart();
}
retVal.myTargetResourceUrl = myTargetResourceUrl;
retVal.myTargetResourceVersion = myTargetResourceVersion;