Я уже прочитал много вопросов по той же проблеме, но я все еще не могу решить эту проблему.
Мне нужен первичный ключ 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){ ... } - не сработалоНи один из этих способов не помог мне.
ОБНОВИТЬ
Я использую Spring Boot и Spring Data JPA.
Как мне вставить:
У меня есть аннотированный метод @PostMapping, который обрабатывает запрос POST и вызывает службу, которая выполняет некоторую бизнес-логику и вызывает мой репозиторий для сохранения.
Просьба размещаю:
{
"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
}
}




попробуйте этот подход
@Entity
public class MyClass{
@Id
@GeneratedValue(generator = “UUID”)
@GenericGenerator(
name = “UUID”,
strategy = “org.hibernate.id.UUIDGenerator”,
)
@Column(name = “id”, updatable = false, nullable = false)
private UUID id;
…
}
======================================
Я вызываю это так, и в моем окружении все работает нормально:
@Autowired
private EntityManager entityManager;
@PostMapping("")
@Transactional
public void add(@RequestBody MyClass myClass){
entityManager.persist(myClass);
}
и требуется отправить по почте с телом:
{
"myId" : "213b2bbb1"
}
@MatheusCirillo хорошо, попробуйте добавить только @GeneratedValue (стратегия = GenerationType.AUTO) для частной String myId;
К сожалению, возникают другие ошибки. "Unknown integral data type for ids : java.lang.String; nested exception is org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.String"
@MatheusCirillo, мой вопрос, как вы вставляете запись? вы используете entityManager.persist?
Убедитесь, что вы отправили myId как не null
Я использую Spring Data JPA. Обновлен вопрос, описывающий, как я сохраняю данные.
перейдите на entityManager.persist(myClass) и убедитесь, что myId не равен нулю, он должен работать
Я не могу использовать UUID. Этот первичный ключ задается полем, которое поступает в запросе POST.