У меня есть класс POJO:Spring Загрузочный + Hibernate - Как сохранить @Transient поля
@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;
}
Это @Transient, потому что я не хочу, чтобы сохраняться Set, я это нужно так же, как «счетчик» в контроллере.
Часть контроллера нам нужен:
@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);
В принципе, я хочу, чтобы добавить или удалить idLuce
в набор, а затем проверить, если activeSensors.isEmpty()
. Проблема в том, что каждый вызов контроллера возвращает мне пустой набор, а не набор с предыдущими idLuce
с внутри. Как я могу его получить?
У вас включен кеширование? –
нет у меня нет этого – besmart
Я не уверен на 100%, но если свойство @Transient временно сохраняет значение, поскольку оно не сохраняется, оно должно храниться где-то, чтобы вы могли получить желаемый результат, так что второй вызов продолжает получать доступ к нему и изменять его. В вашем случае, чтобы 'Interruttore' обновлялся из базы данных и сохранял кешированные значения. Попробуйте использовать кеш и посмотрите, что произойдет ... –