equals () método para clases con asociación bidireccional

Estoy tratando de implementarequals método para clases JavaBook yChapter en mi solicitud. @Book tiene un conjunto deChapters, mientras que unaChapter tiene un @ asociaBook. La asociación bidireccional se muestra a continuación:

class Book{
    private String isbn;
    private String name;
    private Date publishDate;
    private Set<Chapter> chapters;
    ...

    public boolean equals(Object o){
        if(o == this){
            return true;
        }
        if (!(o instanceof Book)){
            return false;
        }
        Book book = (Book)o;
        if( (this.isbn.equals(book.getIsbn()) ) && (this.name.equals(book.getName())) &&(this.publishDate.equals(book.getPublishDate())) &&(this.chapters.equals(book.getChapters())) ){
            return true;
        }else{
            return false;
        }

    }
}

Ahora intenté implementarequals paraChapter:

public class Chapter {
    private String title;
    private Integer noOfPages;
    private Book book;
    ...

    public boolean equals(Object o){
         if(o == this){
            return true;
        }
        if (!(o instanceof Chapter)){
            return false;
        }
        Chapter ch = (Chapter)o;
        if((this.title.equals(book.getTitle())) && (this.noOfPages.intValue()== book.getNoOfPages().intValue())  ){
            return true;
        }else{
            return false;
        }
    }

}

Aquí, me pregunto si también necesito comparar el campo del libro. ¿No comenzaría eso un bucle infinito? ¿Cuál es la forma correcta de implementar laequals método para tales asociaciones bidireccionales?

Respuestas a la pregunta(4)

Su respuesta a la pregunta