r2db c -ms sql generateKey тип возвращаемого значения числовой - PullRequest
0 голосов
/ 06 января 2020

Образец стека: Spring Data R2db c 1.0.0.RELEASE, R2db c Ms sql 0,8, полный код здесь .

Сценарий инициализации :

use tempdb;

IF OBJECT_ID(N'dbo.posts', N'U') IS NULL
BEGIN
    CREATE TABLE posts (
        id BIGINT NOT NULL IDENTITY(1,1) PRIMARY KEY,
        title VARCHAR (50) NOT NULL,
        content VARCHAR (50) NOT NULL,
        createdAt DATETIME,
        updatedAt DATETIME
    )
END;

При сохранении данных и получении сгенерированных ключей из DataInitializer.

@Component
@Slf4j
class DataInitializer {

    private final DatabaseClient databaseClient;

    public DataInitializer(DatabaseClient databaseClient) {
        this.databaseClient = databaseClient;
    }

    @EventListener(value = ContextRefreshedEvent.class)
    public void init() {
        log.info("start data initialization...");
        this.databaseClient.delete().from("posts")
                .then().
                and(

                        this.databaseClient.insert()
                                .into("posts")
                                //.nullValue("id", Integer.class)
                                .value("title", "First post title")
                                .value("content", "Content of my first post")
                                .map((r, m) -> r.get( 0, BigDecimal.class)).all()
                                .log()
                )
                .thenMany(
                        this.databaseClient.select()
                                .from("posts")
                                .orderBy(Sort.by(desc("id")))
                                .as(Post.class)
                                .fetch()
                                .all()
                                .log()
                )
                .subscribe(null, null, () -> log.info("initialization is done..."));
    }

}

Если я использую Integer или Long вместо BigDecimal в строка .map((r, m) -> r.get( 0, BigDecimal.class)).all(), это вызовет ошибку, указывает Невозможно декодировать значение типа [java .lang.Long], имя [GENERATED_KEYS] тип сервера [числовой] , это не bigint, как определено в скрипте схемы я должен использовать BigDecimal, чтобы он работал.

...