Spring Data ReactiveCrudRepository сохраняет операцию, не сохраняя данные в базе данных Postgres - PullRequest
0 голосов
/ 29 января 2019

Для приведенного ниже кода операции Get и Update в репозитории работают нормально.Но операция сохранения не сохраняет данные в таблицы.Это прекрасно работает, если я сам внедряю репозиторий.После замены его интерфейсом, расширяющим ReactiveCrudRepository, эта проблема началась.Я что-то упустил?

@SpringBootApplication
public class ReactiveSqlApplication {
public static void main(String[] args) {
    SpringApplication.run(ReactiveSqlApplication.class, args);
}

}

@Data
@AllArgsConstructor
@NoArgsConstructor
@Table("store")
class Store {

@Id
private String id;

private String name;

private String description;

}

interface StoreRepository extends ReactiveCrudRepository<Store, String> {
}

@Configuration
@EnableR2dbcRepositories
class R2dbcConfiguration extends AbstractR2dbcConfiguration {

private final ConnectionFactory connectionFactory;



   R2dbcConfiguration(ConnectionFactory connectionFactory) {
        this.connectionFactory = connectionFactory;
    }

    @Override
    public ConnectionFactory connectionFactory() {
        return this.connectionFactory;
    }
}


@Configuration
class ConnectionFactoryConfiguration {

@Bean
ConnectionFactory connectionFactory() {
    PostgresqlConnectionConfiguration config = PostgresqlConnectionConfiguration.builder()
            .host("localhost")
            .port(5433)
            .database("testdb")
            .username("postgres")
            .password("root")
            .build();
    return new PostgresqlConnectionFactory(config);
}

}

Код проверен, как показано ниже:

@SpringBootTest
@RunWith(SpringRunner.class)

public class StoreRepositoryTest {
@Autowired
private StoreRepository repository;

@Test
public void all() {

    Flux<Store> storeFlux = Flux.just(new Store("1", "a1", "a1"), new Store("2", "a2", "a2"))
            .flatMap(store -> repository.save(store));

    StepVerifier
            .create(storeFlux)
            .expectNextCount(2)
            .verifyComplete();

    Flux<Store> all = repository.findAll();

    StepVerifier
            .create(all)
            .expectNextCount(2)
            .verifyComplete();

}

}

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Я столкнулся с этой же проблемой недавно.Это потому, что он делает обновление вместо вставки.Вы должны справиться с этим самостоятельно.См. Связанный вопрос: Почему Spring-data-jdbc не сохраняет мой объект Car?

0 голосов
/ 08 февраля 2019

Метод save() не сохраняет данную сущность, если вы сами устанавливаете идентификатор.Попробуйте установить значение идентификатора в ноль.(Это по крайней мере работает при использовании Long в качестве типа для идентификатора.)

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