Репозиторий возвращает пустой список при загрузке Spring - PullRequest
1 голос
/ 03 марта 2020

Я пытаюсь написать простой REST для извлечения записей из таблицы, которой мне поделились. Поскольку в таблице нет столбца идентификатора по умолчанию, я встроил столбец pk в объект сущности. Пожалуйста, найдите код ниже для вашего обзора.

Проблема, с которой я сталкиваюсь, заключается в том, что repository.findByMediaType, где mediaType является одним из свойств объекта, возвращает пустой список. Я убедился, что параметр запроса не равен нулю, и в таблице есть записи для переданного параметра. Я пытался найти все, но не получилось. Я не могу найти, что не так с кодом. Я новичок в весенней загрузке и хотел бы узнать о различных способах отладки.

Класс реализации службы

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hyb.enterprisedashboard.api.entity.Tenders;
import com.hyb.enterprisedashboard.api.repository.DashboardRepository;



@Service
public class DashboardServiceImpl implements DashboardService{

    Logger logger = LoggerFactory.getLogger(DashboardServiceImpl.class);

    @Autowired
    DashboardRepository dashboardRepository;

    @Override
    public List<Tenders> getTenderByMediaType(String mediaType) {

        List<Tenders> tenderList = dashboardRepository.findAll();
        //findByMediaType(mediaType);

        tenderList.stream().forEach(tender -> {
            logger.info("Order {} paid via {}",tender.getId().getOrderNumber(), tender.getMediaType());
        });

        return tenderList;
    }

}

Класс сущности

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;


@Entity
@Table(name = "TENDERS")
public class Tenders {

    /** The id. */
    @EmbeddedId
    private TendersPK id;

    /** The dateTime. */
    @Column(name="DATE_TIME")
    private Date dateTime;

    /** The tenderMedia. */
    @Column(name="TENDERED_MEDIA")
    private String tenderMedia;

    /** The mediaType. */
    @Column(name="MEDIA_TYPE")
    private String mediaType;

    /** The tenderAmount. */
    @Column(name="TENDERED_AMOUNT")
    private BigDecimal tenderAmount;

    /**
     * @return the id
     */
    public TendersPK getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(TendersPK id) {
        this.id = id;
    }


    /**
     * @return the dateTime
     */
    public Date getDateTime() {
        return dateTime;
    }

    /**
     * @param dateTime the dateTime to set
     */
    public void setDateTime(Date dateTime) {
        this.dateTime = dateTime;
    }

    /**
     * @return the tenderMedia
     */
    public String getTenderMedia() {
        return tenderMedia;
    }

    /**
     * @param tenderMedia the tenderMedia to set
     */
    public void setTenderMedia(String tenderMedia) {
        this.tenderMedia = tenderMedia;
    }

    /**
     * @return the mediaType
     */
    public String getMediaType() {
        return mediaType;
    }

    /**
     * @param mediaType the mediaType to set
     */
    public void setMediaType(String mediaType) {
        this.mediaType = mediaType;
    }

    /**
     * @return the tenderAmount
     */
    public BigDecimal getTenderAmount() {
        return tenderAmount;
    }

    /**
     * @param tenderAmount the tenderAmount to set
     */
    public void setTenderAmount(BigDecimal tenderAmount) {
        this.tenderAmount = tenderAmount;
    }

    @Override
    public String toString() {
        return "Tenders [id=" + id + ", dateTime=" + dateTime + ", tenderMedia=" + tenderMedia + ", mediaType="
                + mediaType + ", tenderAmount=" + tenderAmount + "]";
    }

}

PK Встроенный класс

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Embeddable;


@Embeddable
public class TendersPK implements Serializable{

    /**  The Constant serialVersionUID.*/
    private static final long serialVersionUID = 1L;

    /**
     * 
     */
    public TendersPK() {
    }

    /**
     * @param storeNumber
     * @param orderNumber
     */
    public TendersPK(long storeNumber, long orderNumber) {
        super();
        this.storeNumber = storeNumber;
        this.orderNumber = orderNumber;
    }

    @Column(name = "STORE_NUMBER")
    private long storeNumber;

    @Column(name = "ORDER_NUMBER")
    private long orderNumber;

    /**
     * @return the storeNumber
     */
    public long getStoreNumber() {
        return storeNumber;
    }

    /**
     * @param storeNumber the storeNumber to set
     */
    public void setStoreNumber(long storeNumber) {
        this.storeNumber = storeNumber;
    }

    /**
     * @return the orderNumber
     */
    public long getOrderNumber() {
        return orderNumber;
    }

    /**
     * @param orderNumber the orderNumber to set
     */
    public void setOrderNumber(long orderNumber) {
        this.orderNumber = orderNumber;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + (int) (orderNumber ^ (orderNumber >>> 32));
        result = prime * result + (int) (storeNumber ^ (storeNumber >>> 32));
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (!(obj instanceof TendersPK))
            return false;
        TendersPK other = (TendersPK) obj;
        if (orderNumber != other.orderNumber)
            return false;
        if (storeNumber != other.storeNumber)
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "TendersPK [storeNumber=" + storeNumber + ", orderNumber=" + orderNumber + "]";
    }

}

Репозиторий класса

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import com.hyb.enterprisedashboard.api.entity.Tenders;
import com.hyb.enterprisedashboard.api.entity.TendersPK;

@Repository
public interface DashboardRepository extends JpaRepository<Tenders, TendersPK>{

    @Query("select t from Tenders t where t.mediaType = ?1")
    List<Tenders> findByMediaType(String mediaType);
}

И я вижу ниже запрос передан в консоль

Hibernate: select tenders0_.order_number as order_number1_0_, tenders0_.store_number as store_number2_0_, tenders0_.date_time as date_time3_0_, tenders0_.media_type as media_type4_0_, tenders0_.tendered_amount as tendered_amount5_0_, tenders0_.tendered_media as tendered_media6_0_ from tenders tenders0_

Может кто-нибудь помочь, пожалуйста, найти причину?

...