Идентификаторы для этого класса должны быть назначены вручную перед вызовом сохранения на String ID - PullRequest
0 голосов
/ 24 августа 2018

Уже прочитал много вопросов об этой проблеме, но я все еще не могу решить эту проблему.

Мне нужен первичный ключ 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 

И да, яустановка значения для поля.

Обходные пути, которые я нашел:

  1. Добавление @GeneratedValue аннотации к полю - не работает
  2. Измените тип поля на Integer - это невозможно для меня
  3. Добавить конструктор, который получает myId в качестве параметра public MyClass(String myId){ ... } - не работает
  4. Использовать 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
    }
}

1 Ответ

0 голосов
/ 24 августа 2018

попробуйте этот подход

@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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...