【问题标题】:How to use part of composite key in JPA repository methods?如何在 JPA 存储库方法中使用部分复合键?
【发布时间】:2018-09-01 07:44:10
【问题描述】:

我有一个嵌入了 Id 的课程

@Entity
@Table(name="account_table")
Public class AccountLink {

@EmbeddedId
private AccountLinkKey accountLinkKey;
//Rest of code
}

@Embeddable
Public class AccountLinkKey {
//Rest code here

@ColumnName(name="i am hiding")
private String segAccount;

@ColumnName(name="i am hiding")
private String secAccount;
//Rest of code
}

现在在我的存储库中,我希望有一种方法只能通过 secAccount 进行搜索,那么我应该如何编写 findBy..

List<AccountLink> findBy...(String secAccount); 

我尝试了findByAccountLinkKeySecAccount(String secAccount),但仍然没有成功。

【问题讨论】:

    标签: java spring spring-data-jpa jpql


    【解决方案1】:

    我已经重写了您的课程,并且还可以添加存储库功能。这是我的实现,您可以考虑看看。

    这是课程AccountLink.java

    @Entity
    @Table(name = "account_table")
    public class AccountLink {
    
        @Column(name = "id")
        public Long id;
    
        @EmbeddedId
        private AccountLinkKey accountLinkKey;
    
        @Embeddable
        public class AccountLinkKey {
            @Column(name = "seg_account")
            private String segAccount;
    
            @Column(name = "sec_account")
            private String secAccount;
        }
    }
    

    还有AccountLinkRepository.java

    public interface AccountLinkRepository extends JpaRepository<AccountLink, Long> {
        AccountLink findAccountLinkByAccountLinkKey_SecAccount(String secAccount);
    }
    

    我在AccountLink 类中添加了一个id 列作为account_table 的主键。你的桌子可能也需要这样的东西。

    【讨论】:

    • 感谢您的帮助...您的回答指出了我必须在代码中添加下划线的问题。奇怪的是,类似的事情在其他地方也没有下划线...... :(
    • 很高兴知道我可以提供帮助。谢谢你。 :)
    【解决方案2】:

    通常当您想对 JPA 中的嵌入列执行某些操作时,您可以使用下划线('_') 绑定列。

    例子:

    findBy<Entity_Class_Column_Name>_<Embaded_Class_Column_Name>(...)
    

    【讨论】:

      【解决方案3】:

      当我们将@Embeded 的删除方法用于@Entity 的键时很有用。

      1. 您的键应在“_”后面加上 Embeddable 类的变量。 示例:pkId_firstName(pkid 是 @Embeded 的键,firstName 来自 Embedded 类变量。)
      2. 它应该使用带有'下划线符号的变量的键来遍历。因为没有'_'下划线它不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-21
        • 2020-07-13
        • 2021-02-17
        • 2017-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多