Java 无法执行SQL语句
在编写应用程序时,我遇到了执行SQL语句的问题。我试着在网上寻找解决方案,但没有一个结果有用,我仍然不知道如何处理我遇到的错误。以下是我得到的例外:Java 无法执行SQL语句,java,sql,jpa,Java,Sql,Jpa,在编写应用程序时,我遇到了执行SQL语句的问题。我试着在网上寻找解决方案,但没有一个结果有用,我仍然不知道如何处理我遇到的错误。以下是我得到的例外: org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FKAM8LLDERP40MVBBWCEQPU6L2S: PUBLIC.BOOK_CATEGORY FOREIGN KEY(CAT
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FKAM8LLDERP40MVBBWCEQPU6L2S: PUBLIC.BOOK_CATEGORY FOREIGN KEY(CATEGORY_ID) REFERENCES PUBLIC.CATEGORY(ID) (2)"; SQL statement:
insert into book_category (book_id, category_id) values (?, ?) [23506-196]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
这就是这些类的外观:
图书班
@实体
@表(name=“book”)
公共课堂用书{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@列(nullable=false)
私有字符串标题;
私有字符串描述;
@列(name=“发布日期”)
@时态(TemporalType.TIMESTAMP)
私人日期发布日期;
@JoinColumn(name=“封面图片”)
@OneTONE(cascade=CascadeType.MERGE)
私有上传文件coverImage;
@OneTONE(cascade=CascadeType.MERGE)
私有上传文件内容;
@许多
@JoinTable(name=“book\u category”,joinColumns={@JoinColumn(name=“book\u id”,referencedColumnName=“id”)},
inverseJoinColumns={@JoinColumn(name=“category\u id”,referencedColumnName=“id”)}
私有集合类别;
//构造函数、setter、getter
}
类别
@实体
@表(name=“category”)
公共类类别{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@列(name=“category\u name”)
私有字符串名称;
@ManyToMany(mappedBy=“categories”,fetch=FetchType.LAZY)
私人书目;
// ...
}
那里缺少级联定义。
在首先插入引用的实体(书籍或类别)之前,将写入书籍类别。由于您指定的约束,这是不允许的。解决方案是定义
cascade = CascadeType.ALL
在连接的两侧(在书籍和类别中)。这将确保JPA以正确的顺序保存所有实体。您是否读取了错误?它告诉您违反了名为
FKAM8LLDERP40MVBBWCEQPU6L2S
的约束。它还告诉您该约束是如何工作的,以便您可以识别查询中的错误。
@Entity
@Table(name = "category")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "category_name")
private String name;
@ManyToMany(mappedBy = "categories", fetch = FetchType.LAZY)
private List<Book> books;
// ...
}
cascade = CascadeType.ALL