Уже прочитал много вопросов об этой проблеме, но я все еще не могу решить эту проблему.
Мне нужен первичный ключ String
в моей базе данных.
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class MyClass {
@Id
private String myId;
private String name;
// getters and setters..
}
Проблема в том, что если я использую тип String
в аннотированном поле @Id
, Hibernate выдает исключение при попытке сохранить объект.
ids for this class must be manually assigned before calling
И да, яустановка значения для поля.
Обходные пути, которые я нашел:
- Добавление
@GeneratedValue
аннотации к полю - не работает - Измените тип поля на
Integer
- это невозможно для меня - Добавить конструктор, который получает
myId
в качестве параметра public MyClass(String myId){ ... }
- не работает - Использовать UUID - я не могу, потому что этот идентификатор установленполе, которое приходит с запросом POST.
Ни один из этих обходных путей не работал для меня.
ОБНОВЛЕНИЕ
Я использую SpringДанные загрузки и Spring JPA.
Как вставить:
У меня есть аннотированный метод @PostMapping
, который обрабатывает POST-запрос и вызывает сервice, которые выполняют некоторую бизнес-логику и вызывают мой репозиторий для сохранения.
Запрос, который я отправляю:
{
"myId": "myId",
"name": "myName"
}
MyService.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MyService {
@Autowired
private MyRepository myRepository;
public MyClass save(MyClass myClass) {
return myRepository.save(myClass); // save() should persist my object into the database
}
}