Java 弹簧靴&x2B;Hibernate-如何维护@Transient字段
我有一门POJO课程:Java 弹簧靴&x2B;Hibernate-如何维护@Transient字段,java,spring,hibernate,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 numeroInterrut
@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;
}
@实体
@表(name=“interruttori”,catalog=“SMARTPARK”)
公共类Interruttore实现java.io.Serializable{
私有静态最终长serialVersionUID=1L;
特鲁托私人酒店;
私有整数;
私用字符串;
私有字符串描述;
私人名单;
私有字符串pinName;
私有布尔remoto;
私有布尔stato;
私人日期时间;
私有集activeSensors=new HashSet();
//接受者和接受者,特别是
@短暂的
公共集getActiveSensors(){
返回传感器;
}
public void setActiveSensors(设置activeSensors){
this.activeSensors=activeSensors;
}
它是@Transient的,因为我不想持久化这个集合,我需要它就像控制器中的“计数器”一样
我们需要的控制器部分是:
@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);
@RequestMapping(value=“/sensoristica”)
公共响应findiluminizione(@RequestParam(value=“idLuce”)intidluce,
@RequestParam(value=“lit”)布尔值为lit,
@RequestParam(value=“suServer”)布尔值suServer){
Sensoristica Sensoristica=新的Sensoristica();
Luce-Luce=luceService.findById(idLuce);
字符串nomeLuce=luce.getNomeLuce();
int numeroLuce=luce.getNumeroLuce();
塞特卢斯感觉学(luce);
感觉学。设置照明(照明);
sensoristicaService.saveSensoristica(sensoristica);
logger.debug(“Aggiornato传感器”+数值+”(“+nomeLuce+”)acceso:“+lit”);
//阿吉奥尼亚莫-斯塔托-德尔传感器酒店
卢斯·塞利特(利特);
luceService.updateLuce(luce);
//我想问一下
如果(suServer){
int iditerruttore=luce.getInterruttore().getiditerruttore();
Interruttore Interruttore=interruttoreService.findById(iditerruttore);
设置activeSensors=interruttore.getActiveSensors();
调试(“主动传感器è”+主动传感器);
如果(点亮){
activeSensors.add(idLuce);
logger.debug(“Aggiungo id”+idLuce);
debug(“Activeèlungo:+activeSensors.size());
}否则{
if(activeSensors.contains(idLuce)){
主动传感器。移除(idLuce);
logger.debug(“Rimuovo id”+idLuce);
debug(“Activeèlungo:+activeSensors.size());
}
}
interruttore.setActiveSensors(activeSensors);
interruttoreService.updateInterruttore(interruttore);
布尔值canShutDown=activeSensors.isEmpty();
logger.debug(“canShutDown是”+canShutDown);
基本上,我想在集合中添加或删除idLuce
,然后检查activeSensors.isEmpty()
。
问题是每次对控制器的调用都会返回一个空集,而不是一个包含上一个idLuce
s的集合。
如何获得它?实际上,应根据AccessType应用@Transient 请尝试将@Transient设置为字段
@Transient
private Set<Integer> activeSensors = new HashSet<Integer>();
@Transient
私有集activeSensors=new HashSet();
实际上,应根据访问类型应用@Transient
请尝试将@Transient设置为字段
@Transient
private Set<Integer> activeSensors = new HashSet<Integer>();
@Transient
私有集activeSensors=new HashSet();
您启用了缓存吗?不,我没有启用缓存。不幸的是,瞬态对象没有保存在二级缓存中……我想我必须改变方法。我知道,如果您使用缓存,有一件事对您真正有帮助。然而,这是一个不太好的解决方案,因为它是缓存方法调用,尽管实际上您可以执行缓存你可以考虑的另一个解决方案是,如果你使用注入服务,并让它们存储你需要缓存的变量。@ JoaoEsperancinha,我想我会用一个映射来存储我的变量,你是否已经启用了缓存?不,我不知道瞬态对象没有保存在第二级缓存中。不幸的是,我想我必须改变方法。我知道,如果你使用的话,我会真正帮助你。然而,这是一个不太好的解决方案,因为它是缓存方法调用,虽然实际上你可以用它做你想做的事情。你可以考虑的另一个解决方案是,如果你使用注入服务,使它成为ST。或者您需要缓存的变量。@JoaoEsperancinha我想我会使用带有映射的注入来存储我的变量,谢谢如果我把它放在我得到的字段中,org.hibernate.MappingException:无法确定类型:java.util.Set,在表:interruttori,列:[org.hibernate.mapping.Column(active_)]
尝试使用@Cacheable注释,这非常简单。如果我把它放在我得到的字段中,请参阅文档org.hibernate.MappingException:无法确定类型:java.util.Set,在table:interruttori,列:[org.hibernate.mapping.Column(活动传感器)]
尝试使用@Cacheable注释,这非常简单。请参阅文档