簡體   English   中英

Spring Data JPA多對多服務存儲庫問題

[英]Spring Data JPA Many to Many Service Repository Problem

我試圖將ManyToMany實體添加到我的應用程序。 我創建了實體,但無法實現它。

演員班

@Entity
@Table(name = "actor")
public class Actor {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(nullable = false, name = "actor_name")
    private String actorName;

    @ManyToMany(mappedBy = "actor", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<Movie> movie = new HashSet<Movie>();

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getActorName() { return actorName; }

    public void setActorName(String actorName) {
        this.actorName = actorName;
    }

    public Set<Movie> getMovie() {
        return movie;
    }

    public void setMovie(Set<Movie> movie) {
       this.movie = movie;
    }
}

電影課上,我有

@ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(
            name = "movie_actor",
            joinColumns = {@JoinColumn(name = "movie_id")},
            inverseJoinColumns = {@JoinColumn(name = "actor_id")}
    )
    Set<Actor> actor = new HashSet<Actor>();

........................

 public Set<Actor> getActor () {
        return actor;
    }

    public void setActor(Set<Actor> actor){
        this.actor = actor;
    }

我就是這樣創建我的實體的,但是在MovieService中

Actor actor = ActorRepository.findByActorName(movie.getActor().getActorName());
        movie.setActor(actor);

這部分給我錯誤。 movie.getActor()。getActorName()方法找不到。 我需要看哪里? 在IDE中,它也表示從未使用方法getActorName和setActorName。 我還添加了ActorRepository和ActorService來更仔細地研究問題。

ActorRepository

public interface ActorRepository extends JpaRepository<Actor, Integer> {

    Set<Actor> findByActorName(String actorName);
}

ActorService

@Service
public class ActorService {

    private ActorRepository actorRepository;

    @Autowired
    public ActorService(ActorRepository actorRepository) {
        this.actorRepository = actorRepository;
    }

    public List<Actor> getAllActor() {
        return actorRepository.findAll();
    }
}

添加ManyToMany之后,我使用的是作為OneToMany實體。 服務適用於OneToMany。 如何將它們用於ManyToMany? 我需要在電影中添加多個演員。 我找不到用於ManyToMany實現的MVC項目。

您正在調用movie.getActor().getActorName() ,該方法基本上是對Set<Actor>對象執行getActorName()

您基本上是將關系視為ManyToOne而不是OneToMany

您可以使用以下內容來獲取Set的第一個Actor

ActorRepository.findByActorName(movie.getActors().iterator().next().getActorName());

但是,當然,您並沒有所有Actor的名字

您可以做的是以下幾點

public interface ActorRepository extends JpaRepository<Actor, Integer> {

    Set<Actor> findByActorNameIn(List<String> actorName);
}

並以這種方式調用它

ActorRepository.findByActorNameIn(
    movie.getActors()
         .stream()
         .map(Actor::getName)
         .collect(Collectors.toList())
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM