当我尝试将对象保存到WatchedEpisodeRepository时,出现以下错误:
Can not set User field WatchedEpisode$WatchedEpisodeId.user to java.lang.Integer
下面是我的课程。 WatchedEpisode应该是User和Episode之间的ManyToMany连接表。我认为休眠无法获取用户和剧集的ID来创建用于将WatchedEpisode对象插入存储库的查询。
@Entity
@Table
public class User {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer id;
@NotNull
@NotEmpty
@Column(unique = true)
@Size(min = 8, max = 30)
private String username = "";
public List<Request> getReceivedRequests() {
return receivedRequests;
}
@NotNull
@NotEmpty
@Size(min = 8)
private String password = "";
@Email
@NotNull
@NotEmpty
@Column(unique = true)
private String email = "";
@NotNull
@NotEmpty
private String firstName = "";
@NotNull
@NotEmpty
private String lastName = "";
@OneToMany(mappedBy = "user")
List<WatchedEpisode> watchedEpisode = new ArrayList<>();
//getters and setters
}
@Entity
@Table
public class Episode {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@NotNull
@NotEmpty
private String title;
@NotNull
@NotEmpty
private int season;
@NotNull
@NotEmpty
private int duration;
private String description;
@ManyToOne
TvSeries tvSeries;
@OneToMany(mappedBy = "episode")
List<WatchedEpisode> watchedEpisodes = new ArrayList<>();
//getter and setters
}
@Entity
@IdClass(WatchedEpisode.WatchedEpisodeId.class)
@Table
public class WatchedEpisode implements Serializable {
@Id
@ManyToOne(targetEntity = User.class)
private User user;
@Id
@ManyToOne(targetEntity = Episode.class)
private Episode episode;
@NotNull
@NotEmpty
private LocalDate dateStarted;
public WatchedEpisode() {
}
public WatchedEpisode(User user, Episode episode, @NotNull @NotEmpty LocalDate dateStarted) {
this.user = user;
this.episode = episode;
this.dateStarted = dateStarted;
}
public User getUser() {
return user;
}
public Episode getEpisode() {
return episode;
}
public LocalDate getDateStarted() {
return dateStarted;
}
public static class WatchedEpisodeId implements Serializable {
private User user;
private Episode episode;
public WatchedEpisodeId(User user, Episode episode) {
this.user = user;
this.episode = episode;
}
public WatchedEpisodeId() {
}
@Override
public int hashCode() {
return Objects.hash(user, episode);
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof WatchedEpisodeId)) {
return false;
}
WatchedEpisode watchedEpisode = (WatchedEpisode) obj;
return Objects.equals(user, watchedEpisode.getUser()) &&
Objects.equals(episode, watchedEpisode.getEpisode());
}
}
}