Hi, are there any known issues using InheritanceType.Joined in HS 6.0.7? What I am seeing is this. Entities are added/modified with no issues. But, when deleting entities (whether through the base class repository or through the subclass repository), sometimes (not all the time), the index entries are not removed. I have verified that Hibernate itself is working fine, these entities are indeed deleteted, but the index is stale.
Below is a view of the class hierarchy. Any thoughts would be greatly appreciated.
BTW, when I say that sometimes this occurs, I mean this. Let’s say I create a set of folders and searches that look like this:
RootFolder
Folder1
Search1-1
Search1-2
Folder2
Search2-1
Search2-2
etc: - All exactly the same
Then, if I attempt to delete all folders under the root folder one by one, random folders remain in the folder index (examined with Luke) while others do not. All of the elements are indeed deleted in the databaase and Hibernate reports no errors. Hibernate 5.6.3; Lucene 8.7.0.
Thanks,
Keith
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class AuditablePE<U> {
//The user that created the entity
@KeywordField(name=CREATED_BY_FIELD, sortable = Sortable.YES)
@CreatedBy
@Column(
name = "created_by",
columnDefinition = "TEXT",
nullable = false
)
private U createdBy;
//The timestamp the entity was created
@GenericField(name=CREATED_FIELD, sortable = Sortable.YES)
@CreatedDate
@Column(
name = "created",
nullable = false
)
private Instant created;
//The user that last modified the entity
@KeywordField(name=MODIFIED_BY_FIELD, sortable = Sortable.YES)
@LastModifiedBy
@Column(
name = "modified_by",
columnDefinition = "TEXT",
nullable = false
)
private U lastModifiedBy;
//The timestamp the entity was last modified
@GenericField(name=MODIFIED_FIELD, sortable = Sortable.YES)
@LastModifiedDate
@Column(
name = "modified",
nullable = false
)
private Instant modified;
:
:
}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DynamicUpdate
@Table(name="pfs_element",
uniqueConstraints = @UniqueConstraint(
columnNames = {"name", "parent_id"},
name = "pfs_element_name_parent_id_uq"
))
@Indexed
public abstract class FileSystemElementPE extends AuditablePE<String> {
public static final Long NULL_ID = Long.valueOf(-1);
@Id
@GenericField(name = FileSystemIndex.FS_ELEMENT_ID)
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id", updatable = false, nullable = false)
private Long id;
@FullTextField(name = FileSystemIndex.FS_ELEMENT_NAME)
@Column(
name = "name",
columnDefinition = "TEXT",
nullable = false
)
private String name;
@FullTextField(name = FileSystemIndex.FS_ELEMENT_SUMMARY)
@Column(
name = "summary",
columnDefinition = "TEXT",
nullable = true
)
private String summary;
@Enumerated(EnumType.STRING)
@GenericField(name = FileSystemIndex.FS_ELEMENT_TYPE, sortable = Sortable.YES)
@Column(
name = "elem_type",
nullable = false
)
private FileSystemElementType elementType;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(
name = "parent_id",
foreignKey = @ForeignKey(name = "pfs_element_parent_pfs_folder_id_fk"),
nullable = true
)
private FolderPE parent;
@KeywordField(name = FileSystemIndex.FS_ELEMENT_ANCESTRY)
@Column(
name = "ancestry",
columnDefinition = "TEXT",
nullable = true)
private String ancestry;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(
name = "fs_id",
foreignKey = @ForeignKey(name = "pfs_element_pfs_file_system_fk"),
nullable = true
)
private FileSystemPE fileSystem;
@GenericField(name = FileSystemIndex.FS_ELEMENT_DELETED)
private Boolean deleted;
:
:
}
@Entity
@Table(name="pfs_folder")
@PrimaryKeyJoinColumn(foreignKey=@ForeignKey(name = "fk_pfs_folder_pfs_element_id"))
@DynamicUpdate
public class FolderPE extends FileSystemElementPE {
@Enumerated(EnumType.STRING)
@GenericField(name = FileSystemIndex.FS_FOLDER_TYPE, sortable = Sortable.YES)
@Column(
name = "folder_type",
nullable = false
)
private FolderType folderType;
@OneToMany(
cascade = {CascadeType.PERSIST, CascadeType.MERGE},
fetch = FetchType.LAZY,
mappedBy = "parent"
)
private List<FileSystemElementPE> elements;
:
:
}
@Entity
@Table(name="pfs_patent_search")
@PrimaryKeyJoinColumn(foreignKey=@ForeignKey(name = "fk_pfs_patent_search_pfs_element_id"))
@DynamicUpdate
@Indexed
public class PatentSearchPE extends FileSystemElementPE {
public PatentSearchPE() {
super();
}
@Embedded
@IndexedEmbedded(name=PatentSearchIndex.PATENT_SEARCH_EMBED)
public PatentSearchEmbed search;
:
:
}