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