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?
Haben Sie Caching aktiviert? –
nein ich habe es nicht aktiviert – besmart
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 ... –