Dunno if that was your exact question, but what used to trip me up a lot was that for the ignoring fields function is that "navigation" to the fields to ignore is not considering array / Iterable boundaries.
That is, if I have a class book that has many pages (e.g. if you have a one-to-many relationship and save it to your relational database), I can ignore the fact that "book.pages" is an array, and just work with "book.pages.id" like there was only one page all the time, like so:
assertThat(actualBook)
.usingRecursiveComparison()
.ignoringFields("id", "pages.id", "pages.book")
.isEqualTo(expectedBook);
Why is this confusing? Because if you forget to ignore fields, the exception will state that there is a mismatch in, say, "pages[2].id" - but you won't need that index "[2]" in the ignore statement.