2017-08-03 1 views
1

'Save (S)' in Repositories Auseinandersetzungen mit in '(S) speichern' 'org.springframework.data.repository.CrudRepository' beide Methoden haben gleichen löschen, aber keiner übersteuert den anderen.Beide Methoden haben gleiche Löschung, aber weder überschreibt die anderen

Ich habe diesen Fehler erhalten. Ich versuche, eine Schnittstelle zu erstellen, die als BookRepository bezeichnet wird. Die Schnittstelle erweitert CrudRepository und ich möchte die Methoden save method und saveAll in dieser Schnittstelle implementieren. Wenn ich alle Methoden implementiere, funktionieren alle Methoden gut außer save() und saveAll().

Ich gab Ihnen meine Klassen unten.

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

    } 
} 

Meine Bootstrap-Klasse:

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


} 


} 

und My Book Klasse:

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


} 

Ich glaube, Sie Jungs einfach zu erraten ich eine Klasse als Autor genannt haben, die hat ähnliche Funktionen wie Book.class.

+0

Methode 'save' sollte nicht sein' default S speichern (S entity) '?? das gleiche für die 'saveAll' Methode, sollten Sie' T' mit 'Book' ändern – bracco23

+0

ist' BookRepository' Klasse oder Schnittstelle? –

+0

BookRepository ist eine Schnittstelle. – Zahid

Antwort

1

Da Sie CrudRepository erweitern, dann speichern Methode Buch erwarten, was bedeutet, speichern (Buch juristische Person)

+0

Danke für die Klärung! Es klappt. – Zahid

1

Gibt es einen bestimmten Grund, warum Sie die Speichermethode in CrudRepository außer Kraft setzen wollen? Die Funktionsweise von Spring-Daten besteht darin, dass sie automatisch alle Schnittstellenerweiterungen der CrudRepository-Schnittstelle implementieren und Ihnen Methoden zum Speichern von Entitäten bereitstellen, sodass Sie sie nicht wirklich überschreiben müssen.

Verwandte Themen