gpt4 book ai didi

java.sql.SQLIntegrityConstraintViolationException : Column 'library_idlibrary' cannot be null

转载 作者:行者123 更新时间:2023-11-29 05:50:36 27 4
gpt4 key购买 nike

我正在 hibernate 中建立一对多关系,但是当我尝试插入一个值时在表格中我得到异常,我的照片实体中的 FK 不能为空。

我的父实体:

@Table(name = "library")
@Entity
public class Book {
@OneToMany(
fetch = FetchType.LAZY,
mappedBy = "book",
cascade = CascadeType.ALL,
orphanRemoval = true
)
// setters / getters and other columns

我的子实体

@Entity
@Table(name = "photos")
public class photos{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "idphotos")
private int id;


@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumn(name = "library_idlibrary")
private Book book;
// other columns

异常(exception):

java.sql.SQLIntegrityConstraintViolationException: Column 'library_idlibrary' cannot be null
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:115)
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:960)
com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1116)
com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1066)

我有正在插入值的 DAO 对象和 Controller :

Controller :

  @PostMapping( value = "/newBook",consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
public String add(@ModelAttribute("book") @Valid Book book, HttpServletResponse response, HttpServletRequest request,@RequestParam(value = "photo", required = false) List<MultipartFile> photos, @RequestParam(value = "valute",required = false) String valute,BindingResult result) {
if (result.hasErrors()) {
return "addBook";}

List<entity.photos> list = new ArrayList<>();
for (MultipartFile photo : photos) {
File file =null;
if (!photo.isEmpty()) {
try {
validateImg(photo);
file = new File(context.getRealPath("/uploadFile/" + photo.getOriginalFilename()));
Logger.getAnonymousLogger().info("THE PATH IS " + file.getAbsolutePath());
FileUtils.copyInputStreamToFile(photo.getInputStream(), file);
file.createNewFile();
} catch (IOException ex) {
result.reject("uk_UA", "Поганий тип");
return "addBook";
}
}
if (file != null) {
photos ph = new photos(photo.getOriginalFilename());
StringBuilder builder = new StringBuilder();
builder.append(file.getAbsolutePath());
Logger.getAnonymousLogger().info("SOMETHING HAS BROKEN IN LOGGING FILE");
System.out.println("INSIDE ADD METHOD ");
list.add(ph);

} else list.add(new photos(""));
}
book.getPhotosList().addAll(list);
service.add(book);

return "redirect:/books";
}

道:

   public void add(Book user) {
currentSession().save(user);
}

最佳答案

很可能您还没有设置从照片到书籍的反向引用,然后您将来自书籍的持久化/合并操作级联到照片集合。当您将元素添加到集合中时,您需要维护关系的双方。例如:

Book book = new Book();
Photo photo = new Photo();
book.addPhoto(photo);
photo.setBook(book);
//notice on the line above we set the backreference of the photo to the book.
hibernateSession.persist(book);
// now it is cascading from book to photo and it will set the foreign keys correctly.

关于java.sql.SQLIntegrityConstraintViolationException : Column 'library_idlibrary' cannot be null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54732368/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com