#java #hibernate #jpa #annotations
#java #гибернация #jpa #аннотации
Вопрос:
Я хотел бы сгенерировать пользовательский идентификатор для объекта, в зависимости от значений, уже имеющихся в базе данных.
Я знаю, что было задано несколько вопросов по этому вопросу, но я не могу найти решение…
Вот мой класс :
@Entity
class A {
// primary key for table
@GeneratedValue
@Id
private long tableId;
// id -> should be generated as (1 (max id of type 'type'))
@Formula("1 (select t.id from mytable t where t.type=type)")
private long id;
// type
private String type;
}
Я думал о аннотации @Formula, но я не могу заставить ее работать…
возникло исключение :
java.sql.SQLException: поле 'id' не имеет значения по умолчанию
Я не уверен, что @Formula
это хорошее решение…
Кто-нибудь имеет представление о том, как я могу заставить это работать?
Большое спасибо,
Ben
Ответ №1:
попробуйте это
@Formula(value = "(select t.id 1 from mytable t where t.type=type)")
private long id;
Комментарии:
1. Это исправило возникновение исключения, но на самом деле я неправильно понял использование этой аннотации: мое поле «id» больше не является столбцом таблицы…
Ответ №2:
Я решил свою проблему, используя аннотацию @prePersist.
@PrePersist
private void generateId() {
if(id>0){
return;
}
id= type.lastChronoId;
type.save();
}
с типом, измененным на класс типа, содержащий индекс последнего созданного объекта.