[英]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.