首页 > 解决方案 > 使用JPA时如何使主表的JOIN列不是主表的主键@SecondaryTable

问题描述

所以我在 PostgreSQL 数据库中有 2 个表。它们包含一些电影院的数据。第一个称为 Showings,其中包含放映数据,第二个称为 Movie,其中包含电影数据,我想打印出 Showing 的所有数据以及 Movie 列中的 2 列(链接到图片和标题)

package pwsztar.edu.pl.project_kino.dto;

import org.hibernate.annotations.ManyToAny;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import javax.persistence.*;
import javax.swing.text.StyledEditorKit;
import java.sql.Time;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import com.vladmihalcea.hibernate.type.array.BooleanArrayType;
import org.hibernate.annotations.TypeDefs;

@TypeDefs({
        @TypeDef(
                name = "boolean-array",
                typeClass = BooleanArrayType.class
        )
})
@Entity
@SecondaryTable(schema = "cinema" ,name ="movie", pkJoinColumns = @PrimaryKeyJoinColumn(name = "movie_id"))
@Table(name = "showing",schema = "cinema")
public class Showing{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int showing_id;
    private int hall_id;
    private int price_normal;
    private int price_vip;
    private int movie_id;
    private LocalDate day;
    private Time hour;

    @Type(type = "boolean-array")
    @Column(name = "normal_seats",columnDefinition = "boolean[]" )
    private Boolean[] normal_seats;

    @Type(type = "boolean-array")
    @Column(name = "vip_seats",columnDefinition = "boolean[]")
    private Boolean[] vip_seats;

    @Column (name = "tittle",table = "movie")
    private String tittle;

    @Column (name ="picture",table = "movie")
    private String picture;

但是,当我尝试打印放映数据时,我得到了所有放映数据,但图片和标题为空,只要 movieID 等于 ShowingID,我就会得到数据(我在数据库中有 12 部电影和 26 放映,我没有前 12 场放映为空),这可能是因为加入类似于“JOIN onshowing.movi​​e_id=movie.movi​​e_ID”。而且我显然希望它加入movie_ID。我能做些什么来完成这项工作?

标签: javapostgresqljpaspring-data-jpa

解决方案


推荐阅读