Как вставить запись с пользовательским идентификатором, используя Spring data jdbc? - PullRequest
0 голосов
/ 12 октября 2018

Для Spring Data JPA я могу использовать аннотацию @GeneratedValue(strategy = GenerationType.AUTO) вставить запись с пользовательским идентификатором, но для Spring Data JDBC, как вставить запись с пользовательским идентификатором?Я пытался вставить с идентификатором, но без исключения выкинул, и запись не вставлена ​​в таблицу.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Я нашел другой способ решить эту проблему, хотя это небольшая проблема.

// BaseEntity
public class BaseEntity implements Persistable, Serializable {

    @Id
    String id;

    @Transient
    @JsonIgnore
    private boolean newEntity;

    @Override
    public Object getId() {
        return id;
    }

    public void setNew(boolean newInstance) {
        this.newEntity = newInstance;
    }

    @Override
    @JsonIgnore
    public boolean isNew() {
        return newEntity;
    }
}

// User
User extends BaseEntity
...


// insert
User user = new User();
user.id = "5bffb39cc5e30ba067e86dff";
user.setName("xiangzi");
user.setNew(true);
userRepository.save(user);


// update
User user = new User();
user.id = "5bffb39cc5e30ba067e86dff";
user.setName("xiangzi2");
userRepository.save(user);

Когда вставка должна добавить строку user.setNew(true);.

Спасибо!

Я также добавил комментарий здесь .

0 голосов
/ 12 октября 2018

Способ сделать это с помощью Spring Data JDBC - зарегистрировать BeforeSaveEvent ApplicationListener, который создает идентификатор и устанавливает его в сущности.

@Bean
public ApplicationListener<BeforeSaveEvent> idSetting() {

    return event -> {

        if (event.getEntity() instanceof LegoSet) {

            LegoSet legoSet = (LegoSet) event.getEntity();
            if (legoSet.getId() == null) {
                legoSet.setId(createNewId());
            }
        }
    };
}

Существует пример, демонстрирующий, что в Примеры данных Spring

Причина, по которой ваша строка не была вставлена ​​в таблицу, но вы также не получили исключение: Spring Data JDBC пришел к выводу, что объект уже существует с момента идентификаторабыло установлено и выполнено обновление.Но так как оно не существовало, обновлению не удалось обновить ни одной строки, поэтому ничего не произошло.Возможно, стоит создать запрос на улучшение, чтобы сравнить количество обновлений с 0.

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