我有一个类似这样的结构-
@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
}
现在,我需要使用SomeClass
在txnId
中找到一条记录。是否有如下所示的任何一行功能,还是我需要首先获取TransactionBean
,然后使用它来搜索SomeClass
。
TransactionBean txnBean;
//some stuff done with it
SomeClassRepo someClassRepo;
//I need some function like this
SomeClass someClass = someCLassRepo.findBySOMETHING(txnBean.getTxnId());
答案 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
。