При сохранении некоторых данных из формы мне также необходимо добавить FK в таблицу Record. FK - User.Id. Я знаю, как сохранить данные из поля ввода на форме, но как я могу установить FK (INT значение) для этого:Получить зарегистрированный пользовательский объект и сохранить его как внешний ключ
@ManyToOne
@JoinColumn(name = "id")
@Cascade({CascadeType.ALL})
private User user;
Есть ли какой-нибудь способом, чтобы получить объект, который относится к вошедшему пользователю и сделать что-то например: record.setUser (пользователь)?
Я googled это, но мне не удалось найти, как добиться этого.
Это мой класс сущности.
@Entity
public class Record implements java.io.Serializable{
@Id
@GeneratedValue
private int recordId;
private String recordName;
private String recordComment;
private Date recordDate;
private Integer price;
@ManyToOne
@JoinColumn(name = "userId", insertable = true, updatable = false)
@Cascade({CascadeType.ALL})
private User user;
......
}
@Entity
@Table(name = "system_user")
public class User implements java.io.Serializable{
@Id
@GeneratedValue
private int userId;
@NotEmpty
@Email
private String email;
@Size(min=2, max=30)
private String name;
private String enabled;
@NotEmpty
private String password;
private String confirmPassword;
@Enumerated(EnumType.STRING)
@Column(name = "user_role")
private Role role;
@OneToMany(fetch = FetchType.EAGER,mappedBy = "user", orphanRemoval=true)
@Cascade({CascadeType.ALL})
private List<Record> records;
public void addToRecord(Record record) {
record.setUser(this);
this.records.add(record);
}
....
}
Это, как я сохранить данные в БД:
@RequestMapping(value = "/protected/add", method = RequestMethod.POST)
public String addCost (@ModelAttribute("record") Record record,HttpSession session){
User user = userManager.getUserObject(userManager.getUserId(session.getAttribute("currentUser").toString()));
user.addToRecord(record);
recordService.addRecord(record);
return "redirect:/protected/purse";
}
DAO:
public void addRecord(Record record) {
sessionFactory.getCurrentSession().save(record);
}
UPDATE: проблема была частично решена, выше код отлично работает для меня.
Пользовательский объект будет содержать объект «Список/набор объектов записи». Это означает, что вам нужно создать первый объект пользователя, а затем установить все записи в объекте пользователя, а затем сохранить объект пользователя, ваша проблема будет решена. Если ваш пользовательский объект равен нулю, вы не можете продолжить. –
Я добавил следующий код: 'public void addToRecord (Запись) { record.setUser (this); this.records.add (запись); } Пользователь user = new Пользователь(); user.setId (1); user.setName ("admin"); ... некоторые другие сеттеры user.addToRecord (запись); record.setUser (пользователь); recordService.addRecord (record); ' Но FK не был сохранен, и у меня нет ошибок messsag. –
Я исправил его: просто измените @JoinColumn (name = "userId", insertable = false, updatable = false) на @JoinColumn (name = "userId", insertable = true, updatable = false) –