Crud Repository如何将`findBy`与数据成员的数据成员一起使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Crud Repository如何将`findBy`与数据成员的数据成员一起使用相关的知识,希望对你有一定的参考价值。

我有这样的结构 -

@Entity
@Table("transaction")
public class TransactionBean{

    @Id
    Long txnId;

    //other stuff
}
@Entity
@Table("someclass")
public class SomeClass{

    @Id
    TransactionBean transactionBean;

    //other stuff
}

每个存储库 -

public interface TransactionRepo extends CrudRepository<TransactionBean, Long){
    //some stuff
}

public interface SomeClassRepo extends CrudRepository<SomeClass, TransactionBean){
    //some stuff
}

现在我需要使用SomeClasstxnId找到一条记录。有没有像下面所示的任何一行函数或我需要先得到一个TransactionBean然后用它来搜索SomeClass

TransactionBean txnBean;
//some stuff done with it

SomeClassRepo someClassRepo;
//I need some function like this
SomeClass someClass = someCLassRepo.findBySOMETHING(txnBean.getTxnId());
答案

我理解你这样做的方式(我目前正在研究这样的事情)是:

1)使用该方法定义新接口。

public interface CustomSomeClassRepo{
    public SomeClass findByTxnId(Long id);
}

2)让repo接口也扩展这个接口:

public interface SomeClassRepo extends CrudRepository<SomeClass, TransactionBean),
                                       CustomSomeClassRepo{
        //some stuff
}

注意:我使用的是JpaRepository而不是CRUDRepository。

3)在CustomSomeClassRepo接口中为该方法编写一个实现类。必须将其命名为接口并附加“Impl”

public class CustomSomeClassRepoImpl implements CustomSomeClassRepo{

    @PersistenceContext
    EntityManager em;

    @Override
    public SomeClass findByTxnId(Long id){

        /* Here you run the Query you need using the EntityManager and the id.
           and return an instance of SomeClass;
         */

    }
}

@PersistenceContext将注入EntityManager实例。

4)最后你可以从findByTxnId(Long id)的实例中调用SomeClassRepo

以上是关于Crud Repository如何将`findBy`与数据成员的数据成员一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Doctrine 中使用 findBy() 对结果进行排序

无法在 Spring Boot 中使用 Crud Repository 从 Redis 获取结果?

如何在 Selenium 中使用 @FindBy 注释来处理跨度文本?

使用.NET 6开发TodoList应用(5.1)——实现Repository模式

如何使用 findBy($creteria) 进行双向 OneToOne 映射?

如何使用findBy ..()方法为一条记录编写查询