2017-08-03 23 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接口的任何接口扩展,并为您提供用于保存实体的盒子方法,因此您不需要重写它。

相关问题