将多个文件过帐到数据库-ManyToOne关系的值为Null



我有两个实体,它们之间有一个女人和多个女人的关系,如下所示:

@Entity
@Table(name="file_model")
public class FileModel {
....
@JoinColumn(name = "userid", referencedColumnName = "id")
@ManyToOne(optional = false)
private AppUser appUser;
....
}

@Entity
@Table(name="app_user")
public class FileModel {
....
@OneToMany(cascade = CascadeType.ALL, mappedBy = "appUser")
private Set<FileModel> appUserFiles;
....
}

我正在尝试使用SpringBoot Data/JPA将多个文件发布到数据库。我的控制器中有以下内容。同时,我正在尝试为将要保存的每个文件设置userid。

@RequestMapping(value = { "/addDocument/{id}" }, method = RequestMethod.POST)
public String uploadDocument(@RequestParam("files") MultipartFile[] files, @PathVariable Long id, ModelMap model)
throws IOException {
List<String> fileNames = new ArrayList<String>();
AppUser appUser = appUserRepository.findById(id).get();
System.out.println("User ID is :: " + appUser.getId());
System.out.println("User EMail is :: " + appUser.getUseremail());
try {
List<FileModel> storedFile = new ArrayList<FileModel>();
for (MultipartFile file : files) {
FileModel fileModel = new FileModel();
fileModel.setAppUser(appUser);
fileModel = new FileModel(file.getOriginalFilename(), file.getContentType(), file.getBytes());
fileNames.add(file.getOriginalFilename());
storedFile.add(fileModel);
}
fileRepository.saveAll(storedFile);
model.addAttribute("message", "All files uploaded successfully!");
model.addAttribute("files", fileNames);
} catch (Exception e) {
model.addAttribute("message", "ERROR. File Upload Failed !!");
model.addAttribute("files", fileNames);
e.printStackTrace();
}
return "redirect:/addDocument/" + id;
}

这就是我在控制台上得到的:

User ID is :: 1
User EMail is :: user1@mydomain.com
2020-07-19 16:37:43.951  WARN 39179 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 23502, SQLState: 23502
2020-07-19 16:37:43.952 ERROR 39179 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : NULL not allowed for column "USERID"; SQL statement:
insert into file_model (created_at, updated_at, userid, mimetype, name, pic, id) values (?, ?, ?, ?, ?, ?, ?) [23502-200]
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

现在,既然我的AppUser对象已经成功创建(从id和电子邮件id的sysout值中可以看出(,为什么我会遇到这个异常?我在这里缺少什么?

您确实编写了以下代码:

for (MultipartFile file : files) {
FileModel fileModel = new FileModel();
fileModel.setAppUser(appUser);
fileModel = new FileModel(file.getOriginalFilename(), file.getContentType(), file.getBytes());
fileNames.add(file.getOriginalFilename());
storedFile.add(fileModel);
}

但问题是,首先要将fileModel设置为新的fileModel((,两行之后再进行设置,所以fileModel.setAppUser(appUser(行是没有意义的。就这样吧,它应该会起作用:

final FileModel fileModel = new FileModel(file.getOriginalFilename(), file.getContentType(), file.getBytes());
fileModel.setAppUser(appUser);
fileNames.add(file.getOriginalFilename());
storedFile.add(fileModel);

也尝试使用";最后的";尽可能多。特别是在这种情况下,如果您使用";最后的";,你会意识到你正在覆盖你的对象。

向致以最良好的问候

最新更新