Код: Выделить всё
@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;
}
Код: Выделить всё
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
Мобильная версия