Репозиторий Crud, как использовать `findBy` с элементом данных члена данных - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть что-то вроде структуры -

@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 Ответ

0 голосов
/ 02 сентября 2018

Как я понимаю, вы делаете это (я сейчас удивляюсь чему-то подобному):

1) Определите новый интерфейс с помощью метода.

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

2) Интерфейс репо также расширяет этот интерфейс:

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.

...