有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate返回空对象

我有三张桌子:电影、电影类别和分类 我创建实体类

@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;

}

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


共 (2) 个答案

  1. # 1 楼答案

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

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

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

    反向端使用mappedBy属性映射属性在所属端中定义的属性

  2. # 2 楼答案

    试着把下面的代码放到电影课上

    @JoinTable(name=“MovieCategory”,joinColumns=@JoinColumn(name=“movieId”),inverseJoinColumns=@JoinColumn(name=“categoryId”))

    私人电影目录