Java 映射列表不会与实体一起保存到数据库中

Java 映射列表不会与实体一起保存到数据库中,java,spring,hibernate,spring-mvc,spring-boot,Java,Spring,Hibernate,Spring Mvc,Spring Boot,未保存映射的列表。我为MovieDescription实体设置了值,然后将该实体添加到MovieEntity实体列表中,并将其保存到数据库中。但是,MovieDescription实体不会保存 我有主要实体 @Entity @Table(name = "movies") @Data public class MovieEntity { @Id @Column(unique = true, updatable = false) @GeneratedValue pr

未保存映射的列表。我为
MovieDescription
实体设置了值,然后将该实体添加到
MovieEntity
实体列表中,并将其保存到数据库中。但是,
MovieDescription
实体不会保存

我有主要实体

@Entity
@Table(name = "movies")
@Data
public class MovieEntity {

    @Id
    @Column(unique = true, updatable = false)
    @GeneratedValue
    private Long id;

    ....

    @OneToMany(mappedBy = "movie", cascade = CascadeType.ALL)
    private Set<MovieDescription> descriptions;
}
然后我有描述实体

@Entity
@Data
@EqualsAndHashCode(callSuper = true)
public class MovieDescription extends MovieInfo {

    private String description;
}
然后我试着把电影保存到基地

@Override
public void createMovie(
        @NotNull @Valid final MovieDTO movieDTO,
        @Min(1) final Long userId
) throws ResourceNotFoundException {
    final UserEntity user = this.userRepository.findByIdAndEnabledTrue(userId).get();

    final MovieEntity movie = new MovieEntity();
    movie.setStatus(EditStatus.WAITING);
    movie.setTitle(movieDTO.getTitle());
    movie.setType(movieDTO.getType());
    movieDTO.getDescription().ifPresent(description -> {
        MovieDescription movieDescription = new MovieDescription();
        movieDescription.setDescription(description);
        movieDescription.setUser(user);
        movieDescription.setStatus(EditStatus.WAITING);
        movie.getDescriptions().add(movieDescription);
        System.out.println(movieDescription);
    });
    this.movieRepository.save(movie)
您只需:

movieDescription.setMovie(movie)
您只需:


movieDescription.setMovie(movie)

所以最好的方法是在MovieEntity类中使用一个方便的方法,这将使代码看起来干净,并且不会忘记将引用设置为双向方式

@Entity
@Table(name = "movies")
@Data
public class MovieEntity {

    @Id
    @Column(unique = true, updatable = false)
    @GeneratedValue
    private Long id;

    ....

    @OneToMany(mappedBy = "movie", cascade = CascadeType.ALL)
    private Set<MovieDescription> descriptions;

    public void addMovieDescription(MovieDescription movieDescription){
         movieDescription.setMovie(this);
         descriptions.add(movieDescription);
    }
}
@实体
@表(name=“movies”)
@资料
公共类电影实体{
@身份证
@列(unique=true,updateable=false)
@生成值
私人长id;
....
@OneToMany(mappedBy=“movie”,cascade=CascadeType.ALL)
私有集描述;
public void addMovieDescription(MovieDescription MovieDescription){
movieDescription.setMovie(this);
说明。添加(电影说明);
}
}

因此,最好的方法是在MovieEntity类中使用一个方便的方法,这将使您的代码看起来干净,并且您不会忘记将引用设置为双向方式

@Entity
@Table(name = "movies")
@Data
public class MovieEntity {

    @Id
    @Column(unique = true, updatable = false)
    @GeneratedValue
    private Long id;

    ....

    @OneToMany(mappedBy = "movie", cascade = CascadeType.ALL)
    private Set<MovieDescription> descriptions;

    public void addMovieDescription(MovieDescription movieDescription){
         movieDescription.setMovie(this);
         descriptions.add(movieDescription);
    }
}
@实体
@表(name=“movies”)
@资料
公共类电影实体{
@身份证
@列(unique=true,updateable=false)
@生成值
私人长id;
....
@OneToMany(mappedBy=“movie”,cascade=CascadeType.ALL)
私有集描述;
public void addMovieDescription(MovieDescription MovieDescription){
movieDescription.setMovie(this);
说明。添加(电影说明);
}
}

是否抛出任何错误消息?不会抛出任何错误消息。录音没问题。然后我转到数据库,没有。抛出任何错误消息?没有抛出任何消息。录音没问题。然后我转到数据库,没有。所以我必须单独保存电影和描述?不,你不必,它将自动保存,因为你有
CascadeType。所有
。如果您的意思是如果将生成两个插入查询,那么是的,没有其他方法。因此我必须单独保存电影和描述?不,您不必这样做,因为您有
CascadeType.ALL
,它将自动保存。如果您的意思是如果将生成2个insert查询,那么是的,没有其他方法。