Crud Repository如何对数据成员的数据成员使用`findBy`

时间:2018-09-01 19:05:25

标签: spring spring-boot repository crud spring-repositories

我有一个类似这样的结构-

@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 个答案:

答案 0 :(得分:0)

我了解您执行此操作的方式(我现在很想知道这样的内容)是

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