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
}
现在我需要使用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());
答案
我理解你这样做的方式(我目前正在研究这样的事情)是:
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模式