2017-08-03 3 views
1
l'emporte sur

« save (S) » dans des dépôts affrontements avec « sauver (S) » dans « org.springframework.data.repository.CrudRepository » les deux méthodes ont même effacement, mais ni l'un ni l'autre ne l'emporte sur l'autre.Les deux méthodes ont le même effacement, mais ni l'autre

J'ai eu cette erreur. J'essaye de créer une interface nommée BookRepository. L'interface étend CrudRepository et je veux implémenter la méthode save et la méthode saveAll à l'intérieur de cette interface. Lorsque j'implémente toutes les méthodes, toutes les méthodes fonctionnent bien sauf save() et saveAll().

Je vous ai donné mes cours ci-dessous.

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() { 

    } 
} 

Ma classe bootstrap:

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); 


} 


} 

et My Book Classe:

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; } 


} 

Je pense que vous les gars facilement deviné j'ai une classe nommée comme auteur qui a des fonctions similaires comme Book.class.

+0

La méthode 'save' ne devrait pas être' default S save (entité S) '?? de même pour la méthode 'saveAll', vous devriez changer' T' avec 'Book' – bracco23

+0

est la classe ou l'interface' BookRepository'? –

+0

BookRepository est une interface. – Zahid

Répondre

1

Puisque vous étendez CrudRepository, puis enregistrez la méthode sera attend du livre, ce qui signifie sauver (entité du livre)

+0

Merci d'avoir clarifié! Ça marche. – Zahid

1

Y at-il une raison particulière que vous souhaitez remplacer la méthode de sauvegarde dans CrudRepository? Le fonctionnement des données Spring consiste à implémenter automagiquement toutes les extensions d'interface de l'interface CrudRepository et à vous fournir des méthodes d'enregistrement des entités pour que vous n'ayez pas besoin de le surcharger.