InvalidDataAccessApiUsageException @OneToMany和@ManyToOne关系

时间:2020-05-14 20:26:34

标签: hibernate spring-boot jpa

当我尝试将对象保存到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());
        }
    }


}

0 个答案:

没有答案