2016-05-15 3 views
1

ich eine POJO Klasse halten:Frühling Stiefel + Hibernate - Wie @Transient Felder

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


    private static final long serialVersionUID = 1L; 
    private int idInterruttore; 
    private int numeroInterruttore; 
    private String nomeInterruttore; 
    private String descrizione; 
    private List<Luce> luci; 
    private String pinName; 
    private boolean remoto; 
    private boolean stato; 
    private Date dateTime; 
    private Set<Integer> activeSensors = new HashSet<Integer>(); 
//getters and setters and specifically 
@Transient 
    public Set<Integer> getActiveSensors() { 
     return activeSensors; 
    } 

    public void setActiveSensors(Set<Integer> activeSensors) { 
     this.activeSensors = activeSensors; 
    } 

Es ist @Transient, weil ich nicht will das Set bestehen bleiben, ich muss es nur als „Zähler“ in einem Controller.

Der Controller Teil, den wir brauchen, ist:

@RequestMapping(value="/sensoristica") 
    public ResponseEntity<Sensoristica> findIlluminazione(@RequestParam(value="idLuce") int idLuce, 
                 @RequestParam(value="lit") boolean lit, 
                 @RequestParam(value="suServer") boolean suServer) { 


     Sensoristica sensoristica = new Sensoristica(); 
     Luce luce = luceService.findById(idLuce); 
     String nomeLuce = luce.getNomeLuce(); 
     int numeroLuce = luce.getNumeroLuce(); 
     sensoristica.setLuce(luce); 
     sensoristica.setLit(lit); 
     sensoristicaService.saveSensoristica(sensoristica); 
     logger.debug("Aggiornato sensore " + numeroLuce + " ("+nomeLuce+") acceso: "+lit); 
     //aggiorniamo lo stato del sensore 

     luce.setLit(lit); 
     luceService.updateLuce(luce); 

     //qui gestisco l'interruttore 
     if(suServer){ 

     int idInterruttore = luce.getInterruttore().getIdInterruttore(); 
     Interruttore interruttore = interruttoreService.findById(idInterruttore); 
     Set<Integer> activeSensors = interruttore.getActiveSensors(); 
     logger.debug("Active sensor è " +activeSensors); 
     if(lit){ 
     activeSensors.add(idLuce); 

     logger.debug("Aggiungo id "+idLuce); 
     logger.debug("Active è lungo: "+activeSensors.size()); 
     } else { 
      if (activeSensors.contains(idLuce)){ 
       activeSensors.remove(idLuce); 
       logger.debug("Rimuovo id "+idLuce); 
       logger.debug("Active è lungo: "+activeSensors.size()); 
      } 
     } 
     interruttore.setActiveSensors(activeSensors); 
     interruttoreService.updateInterruttore(interruttore); 
     boolean canShutDown = activeSensors.isEmpty(); 
     logger.debug("canShutDown is "+canShutDown); 

Grundsätzlich möchte ich idLuce zum Set hinzuzufügen oder zu entfernen und dann zu prüfen, ob activeSensors.isEmpty(). Das Problem ist, dass jeder Anruf an den Controller gibt mir ein leeres Set, nicht ein Set mit dem vorherigen idLuce s zurück. Wie kann ich es erhalten?

+0

Haben Sie Caching aktiviert? –

+1

nein ich habe es nicht aktiviert – besmart

+0

Ich bin nicht 100% sicher, aber wenn die @Transient-Eigenschaft nur vorübergehend einen Wert behält, da es nicht beibehalten wird, muss es irgendwo gespeichert werden, damit Sie das gewünschte Ergebnis erhalten. damit der zweite Anruf weiterhin darauf zugreifen und ändern kann. In Ihrem Fall, so dass "Interruttore" von der Datenbank aktualisiert wird und die zwischengespeicherten Werte behält. Versuchen Sie es mit Cache und sehen, was passiert ... –

Antwort

0

Eigentlich sollte @Transient nach AccessType angewendet werden.

Bitte versuchen Sie @Transient auf das Feld einzustellen.

@Transient 
private Set<Integer> activeSensors = new HashSet<Integer>(); 
+0

Wenn ich es in das Feld bringen, bekomme ich 'org.hibernate.MappingException: Konnte den Typ nicht bestimmen für: java.util.Set, at Tabelle: interruttori, für Spalten: [org.hibernate.mapping.Column (active_sensors)] ' – besmart

+0

Versuchen Sie es auch mit @Cacheable Annotation, die ziemlich einfach ist. Siehe Dokumentation http://docs.spring.io/spring/docs/3.1.0.RC1/spring-framework-reference/html/cache.html – shankarsh15

Verwandte Themen