2016-03-30 3 views
1

Ich habe eine Client.class, die eine OneToMany-Beziehung mit Posto.class hat.Spring + Winterschlaf: Erwarteter Typ: java.util.SortedSet, aktueller Wert: org.hibernate.collection.internal.PersistentSet

@Entity 
@Table(name = "client", catalog = "SMARTPARK") 
public class Client implements java.io.Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private int idClient; 
    private String nomeClient; 
    private int numPosti; 
    private int numLuci; 
     private String currentIp; 

    private boolean online; 
    private String prop; 
    private SortedSet<Posto> posti = new TreeSet<>(); 
    private SortedSet<Luce> luci = new TreeSet<>(); 



    public Client() { 
    } 

    public Client(int idClient, String nomeClient, int numPosti, int numLuci, 
      String currentIp, boolean online, String prop, 
      SortedSet<Posto> posti, SortedSet<Luce> luci) { 
     this.idClient = idClient; 
     this.nomeClient = nomeClient; 
     this.numPosti = numPosti; 
     this.numLuci = numLuci; 

     this.currentIp = currentIp; 
     this.prop = prop; 
     this.online = online; 
     this.posti = posti; 
     this.luci = luci; 

    } 

    @Id 
    @Column(name = "id_client", unique = true, nullable = false) 
    public int getIdClient() { 
     return this.idClient; 
    } 

    public void setIdClient(int idClient) { 
     this.idClient = idClient; 
    } 

    @Column(name = "nome_client", nullable = false, length = 65535) 
    public String getNomeClient() { 
     return this.nomeClient; 
    } 

    public void setNomeClient(String nomeClient) { 
     this.nomeClient = nomeClient; 
    } 

    @Transient 
    public int getNumPosti() { 
     return this.numPosti; 
    } 

    public void setNumPosti(int numPosti) { 
     this.numPosti = numPosti; 
    } 

    @Transient 
    public int getNumLuci() { 
     return this.numLuci; 
    } 

    public void setNumLuci(int numLuci) { 
     this.numLuci = numLuci; 
    } 

    @Column(name = "client_ip", nullable=true) 
    public String getCurrentIp() { 
     return currentIp; 
    } 

    public void setCurrentIp(String currentIp) { 
     this.currentIp = currentIp; 
    } 

    @Column(name="online") 
    public boolean isOnline() { 
     return online; 
    } 

    public void setOnline(boolean online) { 
     this.online = online; 
    } 


    @Column(name="prop") 
    public String getProp() { 
     return prop; 
    } 

    public void setProp(String prop) { 
     this.prop = prop; 
    } 

    @OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL, mappedBy = "client", orphanRemoval=true) 
    @OrderBy("numeroPosto ASC") 
    public Set<Posto> getPosti() { 
     return posti; 
    } 

    public void setPosti(SortedSet<Posto> posti) { 
     this.posti = posti; 
    } 

    @OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL, mappedBy = "client", orphanRemoval=true) 
    @OrderBy("numeroLuce ASC") 
    public SortedSet<Luce> getLuci() { 
     return luci; 
    } 

    public void setLuci(SortedSet<Luce> luci) { 
     this.luci = luci; 
    } 

Dies wurde aufgrund einer Verwendung des in einem responseEntity Controller-Set gemacht und ich brauche die Reihenfolge zu erhalten, wie posti im Json Ausgabe angezeigt wird.

So in Posto.class I Vergleichbare Schnittstelle implementiert, overrding die Methode compareTo

@Override 
    public int compareTo(Posto o) { 
     if(this.numeroPosto == o.numeroPosto){ 
      return 0; 
     } else { 
      return this.numeroPosto > o.numeroPosto ? 1 : -1; 
     } 

Nun, wenn mein Controller Aufruf, bekam ich diese Fehlermeldung aus dem Ruhezustand:

2016-03-30 16:18:07.486 ERROR [http-nio-8080-exec-6]: HHH000123: IllegalArgumentException in class: it.besmart.models.Client, setter method of property: posti 
2016-03-30 16:18:07.486 ERROR [http-nio-8080-exec-6]: HHH000091: Expected type: java.util.SortedSet, actual value: org.hibernate.collection.internal.PersistentSet 

Wie kann ich lösen es? Hibernate ändert mein SortedSet in einem PersistentSet, muss ich dieses verwenden, um mein Posti in der gewünschten Reihenfolge zu setzen?

Antwort

1

Das Problem ist, dass Sie Ihre Posti und Luci als konkrete SortSet definiert haben. Hibernate PersistentSet implementiert generische Set-Schnittstelle. Alles, was Sie tun müssen, ist das Ändern von SortSet auf generisch Setzen und Ändern von Getter, Setter entsprechend.

private Set<Posto> posti; private Set<Luce> luci;

+0

, und ich werde den Auftrag durch @OrderBy Anmerkung gegeben bewahren, wenn das Objekt JSON zu schaffen? – besmart

+0

OrderBy: Gibt die Reihenfolge der Elemente einer Sammlung oder Assoziation von Auflistungen an, die zu dem Zeitpunkt abgerufen werden, an dem die Zuordnung oder Sammlung abgerufen wird. Also, ich denke, die Reihenfolge von OrderBy wird beibehalten. –

Verwandte Themen