嵌套的一对多关系jpa spring boot

4nkexdtk  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(411)

我有三个类-文档,页面,句子。一个文档将有多个页面&每页将有多个句子。我尝试使用spring数据jpa注解来Map一对多关系。但它只适用于只有一层的情况,如-document>page。文档>页面>句子时不起作用。
谁能给我一个解决方案,如何做嵌套的一对多的关系呢?
我的课程如下。

@Entity
@Table(name = "DOCUMENT")
public class Document implements Serializable {

private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "FILEID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long idFile;

    @Lob
    @Column(name = "CONTENT")
    private byte[] content;

    @Column(name = "NAME")
    private String name;

    @Column(name = "ID_MAIL_USER")
    private String idMailUser;

    @Column(name = "NUM_PAGES")
    private int numPages;

    @Column(name = "TO_ANALIZE")
    private boolean toAnalize;

    @Column(name = "HASH")
    private String hash;

    @Column(name = "EXTENSION")
    private String extension;

    @Column(name = "SIZE")
    private double size;

    @Column(name = "LINK_TO_DRIVE_FILE")
    private String linkToDriveFile;

    @Column(name="PATH")
    private String path;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @Column(name = "PAGES")
    private List<Page> pages = new ArrayList<>();

   // Setter Getters
}

.

@Entity
@Table(name = "PAGE")
public class Page implements Serializable {

    @Id
    @Column(name = "PAGE_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long idPage;

    @Column(name = "PAGE_NUMBER")
    private int pageNum;

    @Lob
    @Column(name = "CONTENT")
    private String content;

    @ManyToMany(cascade = CascadeType.ALL)
    @Column(name = "SENTENCES")
    private List<Sentence> sentences = new ArrayList<>();

    // Setter Getters

}

.

@Entity
@Table(name = "SENTENCE")
public class Sentence implements Serializable {

    //private long idFile;

    //private long idPage;

    @Id
    @Column(name = "SENTENCE_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(name = "PAGE_NUMBER")
    private int pageNumber;

    @Column(name = "ORDER")
    private int ord;

    @Column(name = "CONTENT")
    private String content;

    @Column(name = "HASH")
    private String hash;

   // Setter Getters

}
s8vozzvw

s8vozzvw1#

你的 OneToMany Map不正确。纠正如下

@Entity
@Table(name = "DOCUMENT")
public class Document implements Serializable {
    ......

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "DOCUMENT_ID")  //Name the foreign key column in PAGE table to DOCUMENT_ID
    private List<Page> pages = new ArrayList<>();    
}

@Entity
@Table(name = "PAGE")
public class Page implements Serializable {
    ....

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "PAGE_ID") //Name the forein key column in PAGE table to PAGE_ID
    private List<Sentence> sentences = new ArrayList<>();
}

使用 @JoinColumn 注解而不是 @Column 指定在数据库中的表之间进行物理Map的外键的名称。

相关问题