Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 嵌套一对多关系jpa spring boot_Mysql_Spring Boot_Jpa - Fatal编程技术网

Mysql 嵌套一对多关系jpa spring boot

Mysql 嵌套一对多关系jpa spring boot,mysql,spring-boot,jpa,Mysql,Spring Boot,Jpa,我有三门课——文档、页面、句子。一个文档将有多个页面&每个页面将有多个句子。我正在尝试使用SpringDataJPA注释映射一对多关系。但它只在只有一个层时工作,如-Document>Page。文档>页面>句子时不工作 谁能给我一个解决方案,如何做嵌套的一对多关系呢 我的课程如下 @Entity @Table(name = "DOCUMENT") public class Document implements Serializable { private static final long

我有三门课——文档、页面、句子。一个文档将有多个页面&每个页面将有多个句子。我正在尝试使用SpringDataJPA注释映射一对多关系。但它只在只有一个层时工作,如-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
}

您的
OneToMany
映射不正确。更正如下

@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<>();
}
@实体
@表(name=“DOCUMENT”)
公共类文档实现可序列化{
......
@OneToMany(cascade=CascadeType.ALL,orphan=true)
@JoinColumn(name=“DOCUMENT\u ID”)//将页表中的外键列命名为DOCUMENT\u ID
私有列表页=新的ArrayList();
}
@实体
@表(name=“PAGE”)
公共类页实现可序列化{
....
@OneToMany(级联=级联类型.ALL)
@JoinColumn(name=“PAGE\u ID”)//将页面表中的forein键列命名为PAGE\u ID
私有列表语句=新的ArrayList();
}

使用
@JoinColumn
注释而不是
@Column
来给出在数据库中的表之间进行物理映射的外键的名称。

什么不起作用?当我注释掉Page class-private List Sequences=new ArrayList()中的senteces字段时,它起作用;但是,当我试图保留句子并给它一对多或多对多的注释时,它不起作用。发生了什么你没有预料到的事情,或者没有发生你预料到的事情?你有错误吗?另外,您的问题是“一对多”,但您有
Page.句
注释为
@ManyToMany
我得到异常-org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“documentController”的bean时出错:通过字段“docRepository”表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.beancreatitionException:创建名为“documentRepository”的bean时出错:无法创建类型为“”的内部bean“”(内部bean)#1fd6708“”…错误消息正在解释错误。你需要在你的问题中包括全部内容。帮帮我们帮帮你,伙计,我试过了。但这给了我这些例外——问题在于您的数据库模式<代码>您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用接近“顺序整数、页码整数、页码ID bigint、主键(句子ID))”的正确语法。。如果需要进一步帮助,请发布sql文件。当我第一次运行应用程序时,表将自动生成。我没有在DB上手动执行任何操作。这不应该有什么问题。导致问题的是嵌套的“一对多”关系。
@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

}
@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<>();
}