Rest API заказ по имени - PullRequest
       7

Rest API заказ по имени

0 голосов
/ 27 апреля 2020

Я пытаюсь создать свой собственный REST API, и у меня возникают проблемы при попытке упорядочить свои данные по имени. В настоящее время я могу отобразить все данные из таблицы стилей, однако я могу sh отсортировать их по алфавиту.

Мне удалось сделать фильтр, извлекая год из даты и проверяя, был ли он в базе данных, это показано в

   public List<Beers> getAllBeersByYear(int year) {
        EntityManager em = DBUtil.getEMF().createEntityManager();

        List<Beers> list = null;
        List<Beers> beersToRemove = new ArrayList<>();
        try {
            list = em.createNamedQuery("Beers.findAll", Beers.class)
                    .getResultList();
            if (list == null || list.isEmpty()) {
                list = null;
            }

        } finally {
            em.close();
        }
        Calendar cal = Calendar.getInstance();
        for (Beers beer : list) {
            cal.setTime(beer.getLastMod());
            if (cal.get(Calendar.YEAR) != year) {

                beersToRemove.add(beer);
            }
        }
        list.removeAll(beersToRemove);
        return list;

    }

контроллер

  @GetMapping(produces=MediaType.APPLICATION_JSON_VALUE)
    public List<Styles> GetAllStyles() {

        return service.getAllStyles();
    }

было бы возможно сделать что-то похожее на службу и контроллер, где вместо фильтрации данных можно отсортировать по имени столбца

Служба

  public List<Styles> getAllStyles() {
        EntityManager em = DBUtil.getEMF().createEntityManager();

        List<Styles> list = null;

        try {
            list = em.createNamedQuery("Styles.findAll", Styles.class)
                    .getResultList();
            if (list == null || list.isEmpty()) {
                list = null;
            }

        } finally {
            em.close();
        }
        return list;

    }

Я использую JPA

@Entity
@Table(name = "styles")
@NamedQueries({
    @NamedQuery(name = "Styles.findAll", query = "SELECT s FROM Styles s"),
    @NamedQuery(name = "Styles.findById", query = "SELECT s FROM Styles s WHERE s.id = :id"),
    @NamedQuery(name = "Styles.findByCatId", query = "SELECT s FROM Styles s WHERE s.catId = :catId"),
    @NamedQuery(name = "Styles.findByStyleName", query = "SELECT s FROM Styles s WHERE s.styleName = :styleName"),
    @NamedQuery(name = "Styles.findByLastMod", query = "SELECT s FROM Styles s WHERE s.lastMod = :lastMod")})
public class Styles implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @NotNull
    @Column(name = "cat_id")
    private int catId;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 255)
    @Column(name = "style_name")
    private String styleName;
    @Basic(optional = false)
    @NotNull
    @Column(name = "last_mod")
    @Temporal(TemporalType.TIMESTAMP)
    private Date lastMod;

    public Styles() {
    }

    public Styles(Integer id) {
        this.id = id;
    }

    public Styles(Integer id, int catId, String styleName, Date lastMod) {
        this.id = id;
        this.catId = catId;
        this.styleName = styleName;
        this.lastMod = lastMod;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public int getCatId() {
        return catId;
    }

    public void setCatId(int catId) {
        this.catId = catId;
    }

    public String getStyleName() {
        return styleName;
    }

    public void setStyleName(String styleName) {
        this.styleName = styleName;
    }

    public Date getLastMod() {
        return lastMod;
    }

    public void setLastMod(Date lastMod) {
        this.lastMod = lastMod;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Styles)) {
            return false;
        }
        Styles other = (Styles) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Service.Styles[ id=" + id + " ]";
    }

}

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Вы можете использовать аннотацию @OrderBy

https://www.logicbig.com/tutorials/java-ee-tutorial/jpa/order-by-annotation.html

0 голосов
/ 27 апреля 2020

Просто создайте еще один запрос:

@NamedQuery(name = "Styles.findAll", query = "SELECT s FROM Styles s ORDER BY s.name")

И почему вы фильтруете в коде, когда вы можете добавить запрос с условием where?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...