Не удается разрешить метод, приложение весенней загрузки с использованием данных JPA - PullRequest
0 голосов
/ 25 февраля 2020

Я хотел бы сохранить метод в классе помощника и вызвать этот метод из другого класса. Метод также извлекает данные из репозитория jpa.

По какой-то причине, когда я вызываю метод из вспомогательного класса, я получаю сообщение об ошибке: Не удается разрешить метод 'getDocumentListByProduit' в 'DocumentHelper'. Имя метода также не отображается в автозаполнении IDE. Похоже, что метод не отображается по какой-то причине. Любые намеки почему? заранее спасибо.

класс, откуда я sh вызову метода:

@Entity
@Table(name = "document", schema = "table_name")
public class Document {
   private int id;
   private String url;
   private String type;
   private String titre;
   private String description;

   @Autowired
   private DocumentHelper dh;

...

  public Map<String, List<Document>> getDocumentListByProduit(int id){
       Map<String, List<Document>> ret = dh.getDocumentListByProduit(id);
       return ret;
   }

вспомогательный класс:



@Component
public class DocumentHelper {

   @Autowired
   private DocumentRepository dr;

   public DocumentHelper() {
   }


   public Map<String, List<Document>> getDocumentListByProduit(int id) {
       Map<String, List<Document>> ret = new HashMap<>();
       List<Document> listImg = new ArrayList<>();
       List<Document> listOther = new ArrayList<>();
       List<Document> dList = new ArrayList<>();
       try {
           dList = dr.getDocumentListByProduit(id);
           for (Document tDoc : dList) {
               if (tDoc.getType().equals("image")) {
                   listImg.add(tDoc);
               } else {
                   listOther.add(tDoc);
               }
           }
           ret.put("imageCollection", listImg);
           ret.put("otherCollection", listOther);
       } catch (Exception e) {
           throw new DAOException("Une erreur est survenue : " + e.getMessage());
       }
       return ret;
   }
}


затем репозиторий:


public interface DocumentRepository extends JpaRepository<Document, Integer> {

    // in method getDocumentListByProduit in DocumentHelper
    @Query(value = "SELECT * FROM DOCUMENT D, DOCUMENT_PRODUIT DP WHERE D.id = DP.id_document AND DP.id_produit = :id_produit;", nativeQuery = true)
    List<Document> getDocumentListByProduit(@Param("id_produit") int id_produit);

}

1 Ответ

0 голосов
/ 25 февраля 2020

JPA не использует контейнер Spring для создания экземпляров своих сущностей, поэтому Spring по умолчанию не вводит зависимости в сущности.

Вы можете внедрить зависимости в объекты, не управляемые контейнером Spring, используя @Configurable как описано здесь . Этот подход требует настройки AspectJ в проекте.

Другим способом было бы внедрение зависимостей вручную после того, как JPA построил сущность, используя AutowireCapableBeanFactory#autowireBean. Этот подход может считаться плохой практикой из-за повторяемости, если он вам нужен больше, чем в одном случае.

...