【问题标题】:findAllBy JPA with embeddedIdfindAllBy JPA 与 EmbeddedId
【发布时间】:2023-04-03 08:50:01
【问题描述】:

我有这个带有EmbeddedId 的Document hibernate jpa 实体:

@Entity
data class Document(
        @EmbeddedId
        @NotNull
        val documentExpertId: DocumentExpertId,
        // other fields
)

@Embeddable
data class DocumentExpertId(

        @Column(nullable = false)
        val expertId: String,

        @Column(nullable = false)
        val name: String

) : Serializable

要通过expertId获取所有文档,我想调用我的文档JPA存储库接口方法:

fun findAllByExpertId(String expertId): List<Document>

但是,我发现这样做的唯一方法是:

fun findAllByDocumentExpertIdExpertId(String expertId): List<Document>

还有其他方法可以为这个方法起一个更好的名字吗?

【问题讨论】:

    标签: kotlin spring-data-jpa jpql composite-primary-key hibernate-jpa


    【解决方案1】:

    您可以将 ID 和列定义更改为:

        @EmbeddedId
        @NotNull
        val documentExpertKey: DocumentExpertKey,
    
        @Column(name = "expertId", nullable = false)
        val id: String,
    

    因此您的查询可能是:

        fun findAllByDocumentExpertKeyId(String expertId): List<Document>
    

    这对我来说看起来更正常一些。

    【讨论】:

    • 我真的不想添加 @Column 只是为了命名,也不想为“expertId”设置标签“id”...
    • 你不会添加一个新的@Column in。你会修改你所拥有的。 Spring Data JPA 默认情况下会将变量名称与列名称相关联,但您可以随意命名变量名称,这就是 Spring Data JPA 将用于衍生查询的名称。希望这是有道理的
    猜你喜欢
    • 2012-03-31
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2019-02-15
    • 1970-01-01
    相关资源
    最近更新 更多