У меня есть структура базы данных, как указано выше.затем я пытался вставить новую запись с записью в формате ниже
{
"userId": 2,
"firstName": "project",
"lastName": "principa;",
"username": "principal1",
"password": "$2a$04$eFytJDGtjbThXa80FyOOBuFdK2IwjyWefYkMpiBEFlpBwDH.5PM0K",
"institution": {
"institutionID": 3,
"institutionName": "new_test_schoo;"
},
"authorities": [
{
"authorityID": 2,
"authority": "principal"
}
]
}
Затем из консоли и таблицы я вижу, что учреждение вставлено, но hibernate пытался выполнить обновление.
Hibernate: insert into users (first_name, institution_id, last_name, password, username) values (?, ?, ?, ?, ?)
Hibernate: update authorities set authority=?, user_id=? where authority_id=?
Я использовал следующий метод для вставки новой новой записи
@Override
public void saveUser(Users theUser) {
Session currentSession = sessionFactory.getCurrentSession();
currentSession.save(theUser);
}
А вот мой класс сущности Users
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="user_id")
private int userId;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="username")
private String username;
@Column(name="password")
private String password;
@ManyToOne(cascade={CascadeType.DETACH, CascadeType.MERGE,CascadeType.PERSIST, CascadeType.REFRESH})
@JoinColumn(name="institution_id")
private Institution institution;
@JsonManagedReference
@OneToMany(fetch=FetchType.EAGER,
mappedBy="user",
cascade={CascadeType.ALL})
private List<Authorities> authorities;
...setters and getters
Понятно, что
"authorities": [
{
"authorityID": 2,
"authority": "principal"
}
]
в таблице полномочий не существует, но почему hibernate пытается использовать обновление вместо вставки?И как я могу решить это?
Любая помощь будет оценена.
======================= Обновление ================================
Произошло быстрое обновление, я решил эту проблему, изменив CascadeType
на CascadeType.ALL
.Но я не чувствую, что это правильно.Как если бы я хотел удалить одного пользователя-подписчика, учреждение также будет удалено.Я прав?Но я попытался удалить @GeneratedValue
и @Id
.Это только выдает мне ошибку.И я не думаю, что @GeneratedValue
повлияет на результат.Как будто я присваиваю Id, база данных будет хранить его отдельно.Однако, если я не назначу идентификатор, база данных сгенерирует его автоматически.
Есть идеи?