Я пытаюсь написать простой 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_
Может кто-нибудь помочь, пожалуйста, найти причину?