首页 > 解决方案 > 休眠返回空对象

问题描述

我有 3 个表:movie、movie_category 和 category 我创建实体类

@Entity
@Table(name = "category")
@Data
public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(nullable = false, unique = true)
    private Integer categoryId;
    private String name;
}

public class Movie {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(nullable = false, unique = true)
    private Integer movieId;
    ........

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<MovieCategory> movieCategories;
}

@Entity
@Table(name="movie_category")
@Data
public class MovieCategory {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(nullable = false, unique = true)
    private Integer movieCategoryId;

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "movieId", referencedColumnName = "movieId")
    private Movie movie;

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "categoryId", referencedColumnName = "categoryId")
    private Category category;

}

一部电影有很多film_categories。当我为电影实体使用 JpaRepository 接口和 findAll() 时,hiberante 将movieCategories 作为空数组返回。我使用双向透视。使用单向可以返回带有列表类别的电影吗?

标签: javaspringhibernatejpa

解决方案


不要忘记在 ToMany 注释上使用 mappedBy 属性。在您的情况下是必要的,因为您正在使用双向关联,并且每个双向关联都有所有者方和反向方。

在此之前,您可能必须定义拥有方和反方。JPA 使用拥有方来决定两个实体之间是否存在关联。

拥有方是定义关联如何映射的一方(使用 JoinColumn、JoinTable 等注释)。它没有任何 mappedBy 属性。

反面使用 mappedBy 属性来映射该属性在拥有方中定义的属性。


推荐阅读