У меня есть две таблицы User и ProfilePic с двунаправленным отображением отношений OneToOne.При загрузке изображения профиля для пользователя создается новый пользователь в базе данных с нулевым значением.Мне нужно предотвратить вставку нового пользователя и добавить значение только в таблицу ProfilePic.пожалуйста, не отмечайте как дубликаты и не голосуйте. Я новичок в спящем режиме.Вот соответствующий код:
Класс пользователя:
@Entity
@Table(name = "user_details")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int userId;
private String firstName;
private String lastName;
private String gender;
@Temporal(TemporalType.DATE)
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date dob;
private String email;
private String address;
private String username;
private String password;
private String phoneNumber;
private Boolean isActive;
private String role;
@OneToOne(mappedBy = "user")
private ProfilePic profilePic;
@OneToMany(mappedBy = "user")
private List<Login> login = new ArrayList<>();
-----getter setter---
}
Класс PrfilePic:
@Entity
public class ProfilePic {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int imageId;
private String image_url;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "userId", nullable = false)
private User user;
---getter setter---
}
Класс репозитория:
@Override
public void saveProfilePic(ProfilePic profilePic) {
HibernateUtil.getSession(sessionFactory).save(profilePic);
}
Класс контроллера:
@RequestMapping(value = "/uploadProfileimage", method = RequestMethod.POST)
public String uploadProfileImage(@ModelAttribute User user, @ModelAttribute ProfilePic profilePic,
@RequestParam("image") CommonsMultipartFile file, Model model) {
String imageUrl = "";
if (!file.getOriginalFilename().isEmpty()) {
imageUrl = ImageUtil.writeImageToFile(file);
profilePic.setImage_url(imageUrl);
profilePic.setUser(user);
pictures.add(profilePic);
userService.saveProfilePic(profilePic);
}
return "redirect:/getProfile?userId=" + user.getUserId();
}
log:
Hibernate: select next_val as id_val from hibernate_sequence for update
Hibernate: update hibernate_sequence set next_val= ? where next_val=?
Hibernate: select next_val as id_val from hibernate_sequence for update
Hibernate: update hibernate_sequence set next_val= ? where next_val=?
Hibernate: insert into user_details (address, dob, email, firstName, gender, isActive, lastName, password, phoneNumber, role, username, userId) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into ProfilePic (image_url, userId, imageId) values (?, ?, ?)
Hibernate: select user0_.userId as userId1_7_0_, user0_.address as address2_7_0_, user0_.dob as dob3_7_0_, user0_.email as email4_7_0_, user0_.firstName as firstNam5_7_0_, user0_.gender as gender6_7_0_, user0_.isActive as isActive7_7_0_, user0_.lastName as lastName8_7_0_, user0_.password as password9_7_0_, user0_.phoneNumber as phoneNu10_7_0_, user0_.role as role11_7_0_, user0_.username as usernam12_7_0_, profilepic1_.imageId as imageId1_6_1_, profilepic1_.image_url as image_ur2_6_1_, profilepic1_.userId as userId3_6_1_ from user_details user0_ left outer join ProfilePic profilepic1_ on user0_.userId=profilepic1_.userId where user0_.userId=?
Ожидаемый результат: вставить данные только в таблицу ProfilePic с соответствующим идентификатором пользователя. Фактический результат: данные вставлены в обе таблицы: User и ProfilePic.Создан новый пользователь с нулевыми значениями во всех столбцах.Помощь будет высоко оценена.Я застрял в этом.