首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >发生意外的SQLSelectCountMismatchException

发生意外的SQLSelectCountMismatchException
EN

Stack Overflow用户
提问于 2022-08-29 17:34:50
回答 2查看 52关注 0票数 0

我一直在抱怨,我必须用眼睛检查hibernate查询,而不需要自动化。这就是为什么我被vladmihalcea称为db-util的图书馆迷住了。

但问题是。我不能用它的方法。我用Kotlin Spring Boot。下面是密码。

实体

代码语言:javascript
复制
@Entity
class Book(
    @Id
    @GeneratedValue(strategy = IDENTITY)
    val id: Long = 0L,
)

存储库

代码语言:javascript
复制
interface BookRepository : JpaRepository<Book, Long>

服务

代码语言:javascript
复制
@Service
class DemoService(
    private val bookRepository: BookRepository,
) {
    @Transactional
    fun a() {
        bookRepository.findById(0)
    }
}

最后,测试代码

代码语言:javascript
复制
@SpringBootTest
@TestConstructor(autowireMode = ALL)
internal class DemoServiceTest(
    private val demoService: DemoService,
) {
    @Test
    fun a() {
        reset()
        demoService.a()
        assertSelectCount(1)
    }
}

这个测试给了我一个失败的结果,下面的消息如下:

代码语言:javascript
复制
Expected 1 statements but recorded 0 instead!
com.vladmihalcea.sql.exception.SQLSelectCountMismatchException: Expected 1 statements but recorded 0 instead!

我不明白的是,所测试的服务方法a()是事务性方法,但assertSelectCount()方法没有检测到已执行的查询。

以下是日志:

代码语言:javascript
复制
[    Test worker] org.hibernate.SQL                        : select book0_.id as id1_0_0_ from book book0_ where book0_.id=?
[    Test worker] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [BIGINT] - [0]

你能帮帮我吗?提前谢谢。

EN

Stack Overflow用户

回答已采纳

发布于 2022-09-02 06:46:30

我错过的是数据代理。

下面的代码需要通过测试方法a()。我找到了这个这里

代码语言:javascript
复制
@Component
class DatasourceProxyBeanPostProcessor : BeanPostProcessor {
    override fun postProcessBeforeInitialization(bean: Any, beanName: String): Any {
        return bean
    }

    override fun postProcessAfterInitialization(bean: Any, beanName: String): Any {
        return if (bean is DataSource) {
            ProxyDataSourceBuilder.create(bean)
                .logQueryBySlf4j(INFO)
                .multiline()
                .countQuery()
                .build()
        } else bean
    }
}
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73532597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档