Пользовательский генератор UUID в HibernateJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Пользовательский генератор UUID в Hibernate

Сообщение Anonymous »

У меня есть класс Car:

Код: Выделить всё

@Getter
@Setter
@Entity
@Table(name="car", schema="my_schema")
@Builder // and some other annotations...
public class Car{

@NotNull
@Id
@Column(columnDefintion= "uuid", name="id", nullable=false)
@GeneratedValue(generator="CarGenerator")
@GenericGenerator(
name="CarGenerator",
strategy = "com.myCars.utils.CarGenerator"
)
private UUID id;

}
и CarGenerator:

Код: Выделить всё

public class CarGenerator extends AbstarctUUIDGenerato{

@Override
public object generate(SharedSessionContractImplementator sharedSessionContractImplementator, Object o) throws HibernateException{
if (o instance of Car car && car.getId() != null){
return car.getId();
}
return UUID.randomUUID();
}

}
Моя цель — автоматическое создание идентификатора на случай, если я не присвою какое-либо значение вручную.
Например, в своих тестовых классах я создаю объекты автомобилей с помощью конструктора следующим образом:

Код: Выделить всё

Car car = Car.builder()
.brand("Toyota")
.model("Camry")
.builder();
carRepository.save(car);
//in this case I want Java to assign random UUID.

Car car = Car.builder()
.id(UUID.fromString("08f2364e-1fe3-4807-8378-09006f85e837"));
.brand("Toyota")
.model("Camry")
.builder();
carRepository.save(car);
//in this case I am the one who created id and I expect it will be saved like this to database.
Я ожидаю, что оба случая будут работать правильно.
Как можно добиться такого поведения? Я подумывал о создании собственного класса CarBuilder, но мне интересно, есть ли более элегантное решение.


Подробнее здесь: https://stackoverflow.com/questions/761 ... -hibernate
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»