2017-08-03 334 views
1

「保存(S)」與在 「保存(S)」「org.springframework.data.repository.CrudRepository」存儲庫衝突兩種方法都有 相同擦除,但都不會超越另一個。兩種方法都有相同的擦除,但既沒有覆蓋其他

我得到了這個錯誤。我試圖創建一個名爲BookRepository的接口。該接口擴展CrudRepository,我想在該接口中實現save方法和saveAll方法。當我實現所有方法時,除save()和saveAll()之外,所有方法都可以正常工作。

我給你我的課程如下。

BookRepository:

package repositories; 

import com.ex.deneme_1.*; 
import org.springframework.data.repository.CrudRepository; 

import java.util.Optional; 

public interface BookRepository extends CrudRepository<Book, Long>{ 

    @Override 
    default <S extends T> S save(S entity) { // That doesn't work 
     return null; 
    } 

    @Override 
    default <S extends T> Iterable<S> saveAll(Iterable<S> entities) { 
     //That doesn't work either 
     return null; 
    } 

    @Override 
    default Optional<Book> findById(Long id) { 
     return null; 
    } 

    @Override 
    default boolean existsById(Long id) { 
     return false; 
    } 

    @Override 
    default Iterable<Book> findAll() { 
     return null; 
    } 

    @Override 
    default Iterable<Book> findAllById(Iterable<Long> ids) { 
     return null; 
    } 

    @Override 
    default long count() { 
     return 0; 
    } 

    @Override 
    default void deleteById(Long id) { 

    } 

    @Override 
    default void delete(Book entity) { 

    } 

    @Override 
    default void deleteAll(Iterable<? extends Book> entities) { 

    } 

    @Override 
    default void deleteAll() { 

    } 
} 

我的引導類:

package Bootstrap; 

import com.ex.deneme_1.*; 
import org.springframework.context.ApplicationListener; 
import org.springframework.context.event.ContextRefreshedEvent; 
import org.springframework.stereotype.*; 
import repositories.*; 

@Component 
public class DevBootstrap implements ApplicationListener<ContextRefreshedEvent>{ 

private BookRepository bookRepository; 
private AuthorRepository authorRepository; 

public DevBootstrap(AuthorRepository authorRepository, BookRepository bookRepository) 
{ 
    this.authorRepository = authorRepository; 
    this.bookRepository = bookRepository; 
} 

@Override 
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { 
    initData(); 
} 


private void initData(){ 
    Author xyz = new Author("xyz","xyz"); 
    Book abc = new Book("Trying to learn Spring","1234","StackOverFlow"); 

    xyz.getBooks().add(abc); 
    abc.getAuthors().add(xyz); 

    authorRepository.save(xyz); 
    bookRepository.save(abc); 


} 


} 

和My Book類:

package com.ex.deneme_1; 
    import javax.annotation.Generated; 
    import javax.persistence.*; 
    import java.util.HashSet; 
    import java.util.Set; 
    import java.awt.*; 


@Entity 



public class Book extends java.awt.print.Book { 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private String title,isbn,publisher; 
private long id; 
@ManyToMany 


@JoinTable(name = "author_book", joinColumns = @JoinColumn(name="book_id"), 
    inverseJoinColumns = @JoinColumn(name = "author_id")) 

    private Set<Author> authors = new HashSet<>(); 

public Book(){ 

} 

public Book(String title,String isbn, String publisher) 
{ 
    this.title = title; 
    this.isbn = isbn; 
    this.publisher = publisher; 
} 

public Book(String title, String isbn, String publisher, Set<Author> author) 
{ 
    this.title = title; 
    this.isbn = isbn; 
    this.publisher = publisher; 
    this.authors = author; 
} 

public String getTitle() { return title; } 
public String getIsbn() { return isbn; } 
public String getPublisher() { return publisher; } 
public Set<Author> getAuthors(){ return authors; } 
public long getId() { 
    return id; 
} 



public void setId(long id) { 
    this.id = id; 
} 
public void setTitle(String title) { this.title = title; } 
public void setIsbn(String isbn) { this.isbn = isbn; } 
public void setPublisher(String publisher){ this.publisher = publisher; } 
public void setAuthors(Set<Author> authors){ this.authors = authors; } 


} 

我覺得你們很容易猜到我有一個命名爲作者類具有類似於Book.class的功能。

+0

'save'方法不應該是'default S save(S entity)'?? 'saveAll'方法是一樣的,你應該用'Book'改變'T'' – bracco23

+0

是'BookRepository'類或接口? –

+0

BookRepository是一個接口。 – Zahid

回答

1

既然要擴展CrudRepository,然後保存方法將被期待的書,這意味着節省(Book實體)

+0

謝謝澄清!有用。 – Zahid

1

有要覆蓋在CrudRepository保存方法的特別的原因? Spring數據的工作方式是它會自動實現CrudRepository接口的任何接口擴展,併爲您提供用於保存實體的盒子方法,因此您不需要重寫它。

相關問題