Encountered a duplicated sql alias [ID] during auto-discovery of a native-sql query; nested exceptio

本文探讨了一段包含重名字段的SQL语句,具体涉及两个ID字段的使用场景:一个是ent.id,另一个是o.id。文章深入分析了这种设计可能带来的问题,并提供了理解和解决这一问题的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

select ent.id,ent.enter_name,dis.unit_name,dis.advice,dis.advice_content,case when o.id is null then '未分送' when o.id is not null then '已分送' end statusName,o.id from "
				+ " ( select * from lhcj_disciplinary where STATUS_ID=11 ) dis "
				+ " left join lhcj_ent ent on dis.id=ent.disciplinary_id "
				+ " left join lhcj_opinion o on ent.id=o.ent_id where 1=1 ";
………………………………

此SQL中包含重名字段,两个ID【一个是ent.id 】【一个是o.id】

<think>好的,我现在要解决用户的问题:org.junit.platform.launcher.core.DiscoveryIssueException: TestEngine with ID 'junit-jupiter' encountered a critical issue during test discovery。 首先,我需要理解这个异常的含义。DiscoveryIssueException通常是在JUnit平台尝试发现测试时出现的严重问题。这里提到的是TestEngine的ID是junit-jupiter,也就是JUnit Jupiter测试引擎在发现测试过程中遇到了问题。 接下来,我需要分析可能的原因。常见的原因可能包括类路径或模块路径配置错误、依赖版本冲突、测试类或方法不符合规范、静态初始化错误,或者IDE或构建工具的缓存问题。 然后,我需要逐步给出排查步骤。第一步是检查依赖配置,确保JUnit Jupiter的依赖正确,尤其是junit-jupiter-api、junit-jupiter-engine和junit-platform-launcher的版本是否一致。第二步是检查测试类结构,确保测试类和方法使用了正确的注解,比如@Test,并且是public的。第三步是检查类路径,确认测试类是否被正确编译并位于类路径中。第四步是查看完整的堆栈跟踪,寻找具体的错误原因。第五步是清理和重建项目,以排除缓存问题。第六步是检查静态初始化块或@BeforeAll方法中的潜在问题。第七步是尝试创建一个最小化的重现案例,帮助定位问题。最后,如果问题依然存在,建议用户提供更多上下文信息以便进一步分析。 在整理这些步骤时,需要确保结构清晰,用中文表达,并且符合用户提供的格式要求,比如使用$...$和$$...$$来包裹数学表达式,但在这个问题中可能不需要数学公式,所以主要关注代码块和依赖示例的正确格式。同时,要检查是否有LaTeX语法错误,确保依赖示例正确显示。 最后,总结可能的原因和解决方案,帮助用户系统地排查问题,并鼓励他们提供更多信息以便进一步帮助。</think>遇到 `DiscoveryIssueException` 表示 JUnit Jupiter 测试引擎在发现测试时遇到了严重问题。以下是分步排查指南: --- ### 一、**核心原因** 通常由以下问题触发: 1. **类路径/模块路径配置错误** 2. **依赖版本冲突** 3. **测试类/方法不符合规范** 4. **静态初始化错误** 5. **IDE/构建工具缓存损坏** --- ### 二、**排查步骤** #### 1. **检查依赖配置** 确保 `pom.xml` 或 `build.gradle` 包含 **正确版本的 JUnit Jupiter 依赖**: ```xml <!-- Maven 示例 --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.9.3</version> <!-- 确保版本一致 --> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.9.3</version> <scope>test</scope> </dependency> ``` - 关键点:`junit-jupiter-api`、`junit-jupiter-engine` 和 `junit-platform-launcher` 的版本必须严格一致。 #### 2. **验证测试类结构** - **测试类必须满足以下条件**: - 使用 `@Test` 注解(来自 `org.junit.jupiter.api.Test`) - 测试方法为 `public void` 类型 - 类本身为 `public` 类型 - **错误示例**: ```java class InvalidTestClass { // 缺少 public 修饰符 @Test void testMethod() { // 方法非 public // ... } } ``` #### 3. **检查类路径** - **确认测试类已编译**:检查 `target/test-classes`(Maven)或 `build/classes/java/test`(Gradle)目录下是否存在编译后的 `.class` 文件。 - **模块化项目检查**:若使用 Java 9+ 模块化,需在 `module-info.java` 中声明 `opens` 或 `exports` 测试包。 #### 4. **查看完整堆栈跟踪** 通过 `mvn test` 或 `./gradlew test --stacktrace` 获取完整错误日志。典型问题可能包括: - **反射访问权限错误**(需配置 JVM 参数 `--add-opens`) - **静态初始化块崩溃**(如 `@BeforeAll` 方法抛出异常) #### 5. **清理并重建项目** - **Maven**:运行 `mvn clean test` - **Gradle**:运行 `./gradlew cleanTest test` - **IDE**:手动清理缓存(如 IntelliJ 的 `File > Invalidate Caches`) #### 6. **检查静态初始化代码** 若测试类包含 `static {}` 块或 `@BeforeAll` 方法,可能导致类加载失败: ```java public class ProblematicTest { static { int x = 1 / 0; // 抛出 ArithmeticException } } ``` #### 7. **最小化复现** 创建一个仅包含单个测试类的新项目,逐步添加依赖,定位冲突来源。 --- ### 三、**扩展建议** - 使用 **JUnit 5 兼容的构建工具版本**(如 Maven Surefire 2.22.0+) - 通过 `@EnabledIf` 或 `@Disabled` 注解隔离问题测试 --- 若问题仍未解决,请提供以下信息: 1. 完整的错误堆栈跟踪 2. 测试类代码片段 3. 构建工具及版本(如 Maven 3.8.6) 4. JDK 版本(如 OpenJDK 17.0.4) 这将帮助进一步精准定位问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值