Spring Boot + Hibernate - 如何维护@Transient字段

时间:2016-05-15 11:26:04

标签: java spring hibernate

我有一个POJO课程:

@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()。 问题是每次调用Controller都会给我一个空集,而不是一个内置idLuce的集合。 我怎样才能获得它?

1 个答案:

答案 0 :(得分:0)

实际上应该根据AccessType应用@Transient。

请尝试将@Transient设置为该字段。

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