Spring boot 在Hibernate搜索中编制索引时出错-无法获取属性值

Spring boot 在Hibernate搜索中编制索引时出错-无法获取属性值,spring-boot,hibernate-search,Spring Boot,Hibernate Search,我正在使用HibernateSearch和SpringBoot来创建一个可搜索的RESTAPI。尝试发布一个训练实例时,我收到以下堆栈跟踪。这两个人对我来说都不是很有洞察力,这就是我寻求帮助的原因 堆栈跟踪: 在我看来,它正在尝试索引一个空实体!?怎么会这样?有什么想法吗 实体: @Entity @Getter @Setter @NoArgsConstructor @ToString(onlyExplicitlyIncluded = true) @Audited @Indexed(index

我正在使用HibernateSearch和SpringBoot来创建一个可搜索的RESTAPI。尝试发布一个训练实例时,我收到以下堆栈跟踪。这两个人对我来说都不是很有洞察力,这就是我寻求帮助的原因

堆栈跟踪:

在我看来,它正在尝试索引一个空实体!?怎么会这样?有什么想法吗

实体:

@Entity @Getter @Setter @NoArgsConstructor
@ToString(onlyExplicitlyIncluded = true)
@Audited @Indexed(index = "Training")
@AnalyzerDef(name = "ngram",
    tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class ),
    filters = {
      @TokenFilterDef(factory = StandardFilterFactory.class),
      @TokenFilterDef(factory = LowerCaseFilterFactory.class),
      @TokenFilterDef(factory = StopFilterFactory.class),
      @TokenFilterDef(factory = NGramFilterFactory.class,
        params = {
          @Parameter(name = "minGramSize", value = "2"),
        } 
      )
    }
)
@Analyzer(definition = "ngram")
public class Training implements BaseEntity<Long>, OwnedEntity {

    @Id
    @GeneratedValue
    @ToString.Include
    private Long id;

    @NotNull
    @RestResourceMapper(context = RestResourceContext.IDENTITY, path = "/companies/{id}")
    @JsonProperty(access = Access.WRITE_ONLY)
    @JsonDeserialize(using = RestResourceURLSerializer.class)
    private Long owner;

    @NotNull
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    private String name;

    @Column(length = 10000)
    private String goals;

    @Column(length = 10000)
    private String description;

    @Enumerated(EnumType.STRING)
    @Field(index = Index.YES, store = Store.YES, analyze = Analyze.NO, bridge=@FieldBridge(impl=EnumBridge.class))
    private Audience audience;

    @Enumerated(EnumType.STRING)
    @Field(index = Index.YES, store = Store.YES, analyze = Analyze.NO, bridge=@FieldBridge(impl=EnumBridge.class))
    private Level level;

    @ManyToMany
    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
    @NotNull @Size(min = 1)
    @IndexedEmbedded
    private Set<ProductVersion> versions;

    @NotNull
    private Boolean enabled = false;

    @NotNull
    @Min(1)
    @IndexedEmbedded
    @Field(index = Index.YES, store = Store.YES, analyze = Analyze.NO)
    @NumericField
    private Integer maxStudents;

    @NotNull
    @ManyToOne(fetch = FetchType.LAZY)
    private Agenda agenda;

    @NotNull
    @Min(1)
    @Field(index = Index.YES, store = Store.YES, analyze = Analyze.NO)
    @NumericField
    private Integer durationDays;

    @IndexedEmbedded
    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
    @ManyToMany(cascade = CascadeType.PERSIST)
    private Set<Tag> tags = new HashSet<>();
我认为您的versions集合或tags集合包含空对象,这通常不是我们在Hibernate ORM关联中所期望的,显然也不是Hibernate Search所期望的


你能在调试模式下检查一下吗?

事实的确是这样,一开始就不应该发生这种情况。堆栈跟踪中的哪一行是您的指示器?我知道Hibernate搜索的代码库,所以我作弊了,但是这个帮助了我:原因:java.lang.IllegalStateException:无法获取属性值,下面是:org.Hibernate.Search.util.impl.ReflectionHelper.getMemberValueReflectionHelper.java:94。因此,NPE是在获取成员的值时发生的,这意味着源对象为null,正如您正确推断的那样。下面的org.hibernate.search.engine.spi.DocumentBuilderIndexedEntity.buildDocumentFieldsForEmbeddedObjects告诉我们这是在处理@IndexedEmbedded时发生的。