Я пишу веб-сервис REST.Я создаю следующую сущность Author:
@Entity
@Table(name = "author")
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "authorId", unique = true, nullable = false)
private int authorId;
@Column(name = "authorName", nullable = false)
private String name;
@Column(name = "authorSurname")
private String surname;
@Column(name = "nationality")
private String nationality;
@Column(name = "age")
private int age;
@OneToMany(mappedBy = "author", cascade = CascadeType.ALL)
private List<Book> bookList;
public Author() {
}
public Author(int authorId, String name, String surname, String nationality, int age) {
this.authorId = authorId;
this.name = name;
this.surname = surname;
this.nationality = nationality;
this.age = age;
}
}
Значение id
в БД, использующее как Первичный ключ только внутри БД для ссылок на другие таблицы.А для идентификации сущностей по URL (например, /rest/Author/{authorId}
) используйте другое значение - authorId
.Я также не использовал его в конструкторе сущностей.Метод updateAuthor DAO выглядит следующим образом:
public Author updateAuthor(Author author) {
Session session = getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
session.update(author);
transaction.commit();
Author updated = (Author) session
.createQuery("FROM Author WHERE authorId=" + author.getAuthorId())
.uniqueResult();
session.close();
return updated;
}
Но он не работает должным образом ... Когда я пытаюсь обновить существующую сущность с помощью authorId = 4
:
Author author1 = authorDao.updateAuthor(new Author(4, "qweqwe", "qweqwe", "qweqwe", 1000));
Getследующий выполненный HQL-запрос:
Hibernate: update author set age=?, authorId=?, authorName=?, nationality=?, authorSurname=? where id=?
и следующее исключение:
Exception in thread "main" org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
Как это исправить, не задавая все значения отдельно ??