当前位置: 首页 > 知识库问答 >
问题:

不支持mongodb反应式spring boot DBRef解析

苏昊英
2023-03-14

我写了这个程序spring boot mongodb reactive

@SpringBootApplication
public class ReactitveMongoDbApplication {

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

    @Bean
    CommandLineRunner ok(SoscieteRepository sos, TransactionRepository trs) {
        return a -> {
            List<Sosciete> ls = List.of(new Sosciete("SG", "sosciete general", 1235.22),
                    new Sosciete("AB", "AIR BOLL", 478.36), new Sosciete("TO", "TOYOTA", 458.24));
            trs.deleteAll().subscribe(null, null, () -> {
                sos.deleteAll().subscribe(null, null, () -> {
                    ls.forEach(t -> sos.save(t).subscribe(so -> {
                        System.out.println(so);
                        for (int i = 0; i < 10; i++) {
                            Transaction tr = new Transaction();
                            tr.setDate(Instant.now());
                            tr.setSosciete(so);
                            double x = 1 + ((Math.random() * 12) - 6) / 100;
                            tr.setPrice(so.getPrice() * x);
                            trs.save(tr).subscribe(ts -> {
                                System.out.println(ts);
                            });
                        }
                    }));
                });
            });
            System.out.println("done !");
        };
    }
}

interface SoscieteRepository extends ReactiveMongoRepository<Sosciete, String> {
}

@Document
@Data
@AllArgsConstructor
@NoArgsConstructor
class Sosciete {
    @Id
    private String id;
    private String name;
    private double price;
}

interface TransactionRepository extends ReactiveMongoRepository<Transaction, String> {
}

@Document
@Data
@AllArgsConstructor
@NoArgsConstructor
class Transaction {
    @Id
    private String id;
    private Instant date;
    private double price;
    @DBRef(db = "sosciete", lazy = true)
    private Sosciete sosciete;
}

@RestController
class ReactiveRestController {
    @Autowired
    private SoscieteRepository sos;
    @Autowired
    private TransactionRepository trans;

    @GetMapping(value = "/soscietes")
    public Flux<Sosciete> getAllSc() {
        return sos.findAll();
    }

    @GetMapping(value = "/transactions")
    public Flux<Transaction> getAllTr() {
        return trans.findAll();
    }
}

依赖项:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

应用。道具文件:

spring.data.mongodb.database=webflux
spring.data.mongodb.port=27017
server.port=3000

我的代码在此链接中运行良好:

http://localhost:3000/soscietes

但是在这个链接中:

http://localhost:3000/transactions

代码引发以下错误:

java.lang.UnsupportedOperationException: DBRef resolution is not supported!

导致此错误的原因是DBRef注释,它根本不起作用。它引发以下异常。我们可以添加这样的配置使其工作吗?提前谢谢你

共有1个答案

唐俊楚
2023-03-14

我找到了解决方案:我在pom中修改了spring boot父版本。xml:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.3</version>
        <relativePath />
    </parent>

到2.1.2。释放

 类似资料:
  • 我在查阅Spring Data Elasticsearch store的文档时,遇到了以下问题: 有关反应性支持的更多详细信息,请参阅特定于存储的留档。 虽然我已经在elasticsearch商店留档中,但我没有找到任何关于反应性支持的进一步信息。我在哪里可以找到关于这方面的进一步信息?

  • 当我启动应用程序时,我得到了错误我的Pom有以下依赖项,我使用的是 下面是我的存储库接口。 当我启动应用程序时,它会抛出错误: 可以有人请建议如果JPA不支持,然后我应该使用什么,任何帮助都是感激的…

  • 我使用xampp 32位PHP7.1。1. 我在我的Windows上安装了mongodb 3.4.2(Windows 8 Pro 64位) 我还安装了驱动程序(php_mongodb.dll) 我从这里得到:https://pecl.php.net/package/mongodb/1.2.5/windows (7.1线程安全(TS)x86) 但是,当我的系统执行时,仍然存在错误: 哎呀,好像出了什

  • 我需要在JAX-WS中通过客户端连接到外部服务器。客户端在Wildfly 8上运行。使用Java8连接是正常的。但我在Java7中连接到服务器时遇到了问题(我尝试了u45、67、79)。服务器端安全性的属性为https://www.ssllabs.com/ssltest/analyze.html?d=app.bundesnetzagentur.de 在部分“密码套件”中有四个密码。源代码不应支持J

  • Hibernate会支持MongoDB事务吗? MongoDB4.0增加了对多文档ACID事务的支持。但是Hibernate仍然不支持这一点,我不能简单地使用@transactional(Grails framework)注释为MongoDB操作添加事务性行为。我得自己写事务性管理代码。有没有人有更好的解决方案或者什么时候Hibernate支持它?谢谢! 引自Hibernate:MongoDB不支

  • 伙计们,我对Spring Data MongoDB提供的BigDecimal值支持有疑问,有人能帮我提供一些关于它的消息吗,是否会支持这种类型,或者是否有人知道一种解决方法来满足我的需求。这就是交易:我正在做一个项目,我们使用MongoDB作为DB,Spring作为框架,我们希望将数据库中应该获取金钱值的字段保存为BigDecimal,我已经读到mongo只接受double作为浮点数,但我认为这种