【问题标题】:why is there error, when i use querydsl in kotlin?为什么会出现错误,当我在 kotlin 中使用 querydsl 时?
【发布时间】:2020-11-19 17:09:25
【问题描述】:

我想在 springboot(kotlin) 中使用 querydsl,但是当我使用 findOne() 测试 querydsl 时,出现错误..

  1. 账户数据类
@Entity
data class Account(
        val username: String,
        val firstName: String,
        val lastName: String
) {
    @Id
    @GeneratedValue
    val id: Long? = null
}
  1. AccountRepository
interface AccountRepository : JpaRepository<Account, Long>,
        QuerydslPredicateExecutor<Account>
  1. 测试代码
@DataJpaTest
class AccountRepositoryTest {
    @Autowired
    lateinit var accountRepository: AccountRepository

    @Test
    fun crud() {

        accountRepository.save(Account(username = "sooyougkim",
                firstName = "sooyoug",
                lastName = "kim"))

        val predicate: Predicate = QAccount
                .account
                .firstName
                .containsIgnoreCase("sooyoug")
                .and(QAccount.account.lastName.startsWith("kim"))

        val findOne = accountRepository.findOne(predicate).get()

    }
}
  1. 错误信息
java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableMap.put(Collections.java:1459)
    at com.querydsl.jpa.JPQLSerializer.visitConstant(JPQLSerializer.java:327)
    at com.querydsl.core.support.SerializerBase.visit(SerializerBase.java:221)
    at com.querydsl.core.support.SerializerBase.visit(SerializerBase.java:36)
    at com.querydsl.core.types.ConstantImpl.accept(ConstantImpl.java:140)
    .
    .
    .
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    at java.lang.Thread.run(Thread.java:821)

AccountRepositoryTest > crud() FAILED
    java.lang.UnsupportedOperationException at AccountRepositoryTest.kt:31
2020-07-30 09:58:37.653  INFO 21450 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-07-30 09:58:37.653  INFO 21450 --- [extShutdownHook] .SchemaDropperImpl$DelayedDropActionImpl : HHH000477: Starting delayed evictData of schema as part of SessionFactory shut-down'
Hibernate: 
    

我认为有一些映射错误 QAccount -> Account...

有人要检查吗?

【问题讨论】:

    标签: spring-boot kotlin querydsl


    【解决方案1】:

    我解决了这个问题。 原因是插件版本问题.. 当我将版本更改为最新版本时,querydsl 表现良好。

    这是我对 build.gradle.kts 的依赖

        api("com.querydsl:querydsl-jpa:4.3.1")
        kapt("com.querydsl:querydsl-apt:4.3.1:jpa") 
    

    并且,您可以在此处查看插件的版本。 https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/appendix-dependency-versions.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 2020-09-07
      • 2022-09-15
      相关资源
      最近更新 更多