如何在JPA存储库方法中使用复合键的一部分?

时间:2018-03-22 18:27:49

标签: java spring spring-data-jpa jpql

我有一个嵌入了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)但仍然没有成功。

2 个答案:

答案 0 :(得分:2)

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

这是班级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);
}

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

答案 1 :(得分:1)

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

示例:

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