Play!2.2.1 Java Ebean - Finder.select(String columns) doesn't work : all the columns are selected

StackOverflow https://stackoverflow.com/questions/21647265

  •  08-10-2022
  •  | 
  •  

문제

I've got an issue with the select function of the Finder object by using ebean with Play! Framework (2.2.1).

I've got my table AnneePromotion :

CREATE TABLE AnneePromotion (
  anneePromotion_ID INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('AnneePromotionSequence'),
  anneePromotion_libelle INTEGER NOT NULL 
);

My entity AnneePromotion :

@Entity
@Table(name = "AnneePromotion")
@SequenceGenerator(name = "AnneePromotionSequenceGenerator", sequenceName =         "AnneePromotionSequence")
public class AnneePromotion extends Model {

    /** serial ID */
    private static final long serialVersionUID = -2072489268439045171L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "AnneePromotionSequenceGenerator")
    @Column(name = "anneePromotion_ID")
    private Integer id;

    @Column(name = "anneePromotion_libelle")
    private String libelle;

    public Integer getId() {
        return id;
    }

    public String getLibelle() {
        return libelle;
    }

    public void setLibelle(String libelle) {
        this.libelle = libelle;
    }

    public static Finder<Integer, AnneePromotion> find = new Finder<Integer, AnneePromotion>(
        Integer.class, AnneePromotion.class);

}

And when I try to use the select function in order to just have libelle :

    List<AnneePromotion> listeDesAnneesdePromotion = AnneePromotionDao.find
            .select("libelle").orderBy("libelle asc").findList();
    for (AnneePromotion anneepromotion : listeDesAnneesdePromotion){
        System.out.println(anneepromotion.getId()+" "+anneepromotion.getLibelle());
    }

I received my objects with id and libelle columns :

1 2003
2 2004
3 2005
4 2006
5 2007
6 2008
7 2009
8 2010
9 2011
10 2012
11 2013
12 2014
13 2015
14 2016

I don't know with the select function doesn't work, if I made a stupid mistake or not :/

Hope you could help me.

Regards, Anthony.

도움이 되었습니까?

해결책

That's common behavior of Ebean, reason is simple: you are asking for list of objects of concrete type, so it can't just return list of strings (without id) as it need to identify rows somehow.

The simplest solution is rewriting it to new list ie.

List<String> libelles = new ArrayList<>();
for (AnneePromotion anneepromotion : listeDesAnneesdePromotion){
    libelles.add(anneepromotion.getLibelle());
}

Optionally you can also use Ebean's SqlQuery and then iterate through the list of SqlRow to get the same libelles list.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top