Как вручную установить значение для @GeneratedValue - PullRequest
0 голосов
/ 02 апреля 2020

Загрузите Spring с Spring Data JPA. Postgres DB.

Общая сущность:

@Entity
@Table
class Entity {

@Id
@GeneratedValue
private int id;

}

, когда я пытаюсь сделать запись с указанным значением id, в результате я вижу, что она игнорируется и генерируется @GeneratedValue.

Как это побороть?

1 Ответ

0 голосов
/ 03 апреля 2020

Публикация решения, к которому я пришел после выполнения отладки всего персистентного процесса (не утверждая, что это правильный путь, но я буквально не нашел ни слова о «возможно, я что-то настроил неправильно»):

public class MyGenerator extends SequenceStyleGenerator {

    @Override
    public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
        return Optional.of(object)
                .filter(Entity.class::isInstance)
                .map(Entity.class::cast)
                .map(Entity::getId)
                .filter(i -> i > 0)
                .map(Serializable.class::cast)
                .orElse(super.generate(session, object));
    }
)

и субъект:

@Entity
class Entity implements Serializable {

@GenericGenerator(name = "myGenerator", strategy = "org.a.b.c.generators.MyGenerator")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "myGenerator")
    private Integer id;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...