2016-01-24 3 views
6

मैं दो तालिकाओं है के रूप में नीचे एक के बाद एक के लिए संबंध नहीं है:Lombok.hashCode मुद्दा "java.lang.StackOverflowError: अशक्त"

@Entity 
@Data 
@NoArgsConstructor 
@AllArgsConstructor 
public class Book { 
    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    private int id; 

    private String name; 

    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "book_dtail_id") 
    private BookDetail bookDetail; 
} 

@Entity 
@Table(name = "book_detail") 
@Data 
@NoArgsConstructor 
@AllArgsConstructor 
public class BookDetail { 
    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    private Integer id; 

    @Column(name = "number_of_pages") 
    private Integer numberOfPages; 

    @OneToOne(mappedBy = "bookDetail") 
    private Book book; 
} 

मैं नीचे के रूप में इनपुट डेटा के लिए एक फार्म का इस्तेमाल किया

@Data 
@NoArgsConstructor 
@AllArgsConstructor 
public class BookForm { 
    Book book; 
    BookDetail bookDetail; 
} 

नियंत्रक इस तरह दिखता है:

String handleNewBook(Model model){ 
    Book book = new Book(); 
    BookDetail bookDetail = new BookDetail(); 
    BookForm bookForm = new BookForm(book, bookDetail); 

    model.addAttribute("bookForm", bookForm); 
    return "index"; 
} 

String handleSaveBookCreate(BookForm bookForm, Model model){ 
    bookForm.getBook().setBookDetail(bookForm.getBookDetail()); 
    bookForm.getBookDetail().setBook(bookForm.getBook()); 
    bookService.save(bookForm.getBook())); 
    return "index"; 
} 

अंतिम के रूप में नीचे मेरी रूप है:

<form role="form" action="#" th:object="${bookForm}" th:action="@{/book}" method="POST"> 
    <input type="text" th:field="*{book.name}"/> 
    <input type="text" th:filed="*{bookDetail} == null ? '' : *{bookDetail.numberOfPages}" placeholder="Enter Book Page Numbers"/> 
    <button type="submit">Submit</button> 
</form> 

सब कुछ कोई समस्या नहीं दिखता है, लेकिन जब मैं "bookService.save (bookForm.getBook()));" निष्पादित किया जाता है, मैं नीचे

java.lang.StackOverflowError: null, 
at com.zangland.study.jpa.entity.BookDetail.hashCode(BookDetail.java:17) ~[classes/:na] 
at com.zangland.study.jpa.entity.Book.hashCode(Book.java:16) ~[classes/:na] 
at com.zangland.study.jpa.entity.BookDetail.hashCode(BookDetail.java:17) ~[classes/:na] 
at com.zangland.study.jpa.entity.Book.hashCode(Book.java:16) ~[classes/:na] 

दोहराने के रूप में त्रुटि मिली लगभग 100 लाइनों के ऊपर के रूप में ही .... मतलब है यह है कि मैं Lombok.hashCode उपयोग नहीं कर सकते?

सहेजी गयी पुस्तक: '32768', 'स्प्रिंग जेपीए', '32768' सहेजी गयी BookDetail: '32768', '1157'

उत्तर

20

आप किताब और bookdetails के बीच एक सर्कुलर निर्भरता है। Book से आपको BookDetail या bookDetail से book को बाहर करने की आवश्यकता है।

+0

मैं यह कैसे कर सकता हूं, यह Lombok विशेषताएं है? – mikezang

+9

आप '@qualsAndHashCode (बहिष्कृत करें =" पुस्तक ") जोड़ सकते हैं। अधिक जानकारी के लिए, [EqualsAndHashCode दस्तावेज़] देखें (https://projectlombok.org/features/EqualsAndHashCode.html)। –

संबंधित मुद्दे