java - 无法在 kotlin 中调用静态 panache 方法

标签 java kotlin quarkus

第一篇文章。绝对的新人。善良

我正在玩 quarkus 和 kotlin。

我有这个 kotlin 实体类:

@Entity
data class Fruit (
        var name: String = "",
        var description: String = ""
) : PanacheEntity()

我有这个基于 Java 教程的资源类:

@Path("/fruits")
@ApplicationScoped
public class FruitJResource {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Fruit> getAll() {
        return Fruit.listAll();
    }
}

一切都很好,Fruit 继承自 PanacheEntityBase,我可以访问 listAll()

但是, Kotlin 中的 Same Class 不会:

@Path("/fruits")
@ApplicationScoped
class FruitResource {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    fun getAll(): List<Fruit> = Fruit.listAll()
}

现在我已经了解到,这可能是由于 kotlin 无法从父类(super class)继承静态方法。 我读到,我应该直接从父类(super class)调用静态方法,但这在这里行不通。

所以我需要一个可能的解决方法的建议。

最佳答案

目前 (1.4.1) kotlinscala 语言的唯一解决方案是使用 Repository 模式: 请参阅文档:https://quarkus.io/guides/hibernate-orm-panache#solution-2-using-the-repository-pattern

这是由于引用问题 github.com/quarkusio/quarkus/issues/4394。

因此,如果使用 Kotlin,您只需定义一个新的 FruitRepository

@ApplicationScoped
class FruitRepository: PanacheRepository<Fruit> {

    fun all(): List<Fruit> = findAll(Sort.by("name")).list<Fruit>()
}

关于java - 无法在 kotlin 中调用静态 panache 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59161593/

相关文章:

android - 如何在 BottomNavigationView 中设置指标?

android - Kotlin Flow 与 Android LiveData

spring - 在没有 @DirtiesContext 的情况下,如何在 Quarkus 中实现集成测试?

java - 如何生成大于 2**64 的随机 BigIntegers

Java 导入与代码性能

android - 如何在 Kotlin 中将 Firestore 日期/时间戳转换为日期?

java - Quarkus:数据源自定义凭据提供程序

如果在数组中找到值,则 Java 返回索引

java - 使用 SpringJUnit4ClassRunner 自定义 BeanFactory?

java - react 性消息传递 : Emit events when needed (using Kafka)