hibernate 更新部分选取实体的索引

8hhllhi2  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(118)

在我的项目中,我有一些实体不能更改,但我需要在其中一个实体上创建索引。这是我想要归档的一个示例:
那就是我无法改变的实体:

@Entity
@Table(name = "main")
public class FirstEntity {

    @Id
    private Long id;

    @ManyToOne
    private SecondEntity secondaryEntity;
}

@Entity
@Table(name = "secondary")
public class SecondEntity {

    @Id
    private Long id;
    
    private String name;

}

我的实体

@Indexed
@Entity
@Subselect("select * from main")
//@Table(name = "main")
//@Immutable
public class ThirdEntity {
    @Id
    private Long id;

    @ManyToOne
    private SecondEntity secondaryEntity;

    @Transient
    @GenericField(sortable = Sortable.YES)
    @IndexingDependency(derivedFrom = {
            @ObjectPath(@PropertyValue(propertyName = "secondaryEntity"))
    })
    public String getName() {
        return secondaryEntity.getName();
    }
}

只要SecondEntity变更,ThirdEntity的索引就会维持不变。
我写了一个简单的例子https://github.com/YaroslavTir/reindex-subselect-entity
我想到了一个变通的解决方案。使用hibernateListeners并手动为ThirdEntity重建索引,但这并不是一个很好的解决方案。

myss37ts

myss37ts1#

您的索引依赖项注解不完整,它应该类似于:

@IndexingDependency(derivedFrom = {
        @ObjectPath(
            @PropertyValue(propertyName = "secondaryEntity"),
            @PropertyValue(propertyName = "name")
        )
    })

相关问题