如何在 spring data - jpa -hibernate 中使用复合键进行 findby ?@EmbeddedId

peb*_*ebC 3 hibernate jpa composite-key embeddable spring-data

@Embeddable
public class AccountTransactionId implements Serializable {
    private String trxDate;
    private String acctNo;
    private int trxNo;
}

@Entity
public class Transaction {
    @EmbeddedId
    private AccountTransactionId accountTransactionId;

    private int amt;
    private int fee;
    private String cancelYn;
}
Run Code Online (Sandbox Code Playgroud)

这是我的存储库。如何制作find方法?我对此一无所知

List<Map<String, Object>> findByAccountTransactionId_trxDate(String trxDate);
Run Code Online (Sandbox Code Playgroud)

我尝试了“findByAccountTransactionId_trxDate”、“findByAccountTransactionIdTrxDate”、“findByIdTrxDate”...

小智 8

您可以使用@IdClass(https://attacomsian.com/blog/spring-data-jpa-composite-primary-key

然后你可以只传递链接中示例中的类,那就是

repository.findById(new AccoutId(accountno,accounttype)
Run Code Online (Sandbox Code Playgroud)

这对我有用


Lin*_*adu 6

我建议看看骆驼箱是否会改变一些东西;可能因此而无法工作。

其次,我希望该方法返回对象列表,而不是地图。对于您的情况,这是我希望可行的解决方案:

public interface TransactionRepository extends JpaRepository<Transaction, AccountTransactionId> {

    /**
      * here rename accountTransactionId to id 
      * and trxDate to trxdate
      */
    List<Object> findByIdTrxdate(String trxDate, String acctNo); 
    List<Object> findByAccountTransactionIdTrxDate(String trxDate, String acctNo);

}
Run Code Online (Sandbox Code Playgroud)


uma*_*ang 5

你可以这样写:

public interface TransactionRepository extends JpaRepository<Transaction, AccountTransactionId> {

    List<Map<String, Object>> findByTrxDateAndAcctNo(String trxDate, String acctNo);

}
Run Code Online (Sandbox Code Playgroud)