TransWikia.com

Como actualizar el mismo campo con diferentes valores de una tabla con jpa en java?

Stack Overflow en español Asked by Root93 on December 16, 2021

Tengo las siguientes tablas, la cuales ya hice su mapeo

introducir la descripción de la imagen aquí

@Entity
@Table(name ="Valores", shema="USER_PU")
@SequenceGenerator(name="Valores", sequenceName="USER_PU.SEQ.Valores", allocationSize =1)
@Data
public class Valores implements Serializable{
    
    
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Valores")
@Column(name="ID_VALOR", unique=true, nullable=false)
private Integer idValor;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="ID_AJUSTE", referencedColumnName = "ID_AJUSTE", 
  nullable=false)
private Ajustes ajustes;


@Column(name="VALOR")
private Integer valor;

@Column(name="DESCRIPCION")
private String descripcion;

@Column(name="CANAL")
private String canal;

}




@Entity
@Table(name ="Ajustes", shema="USER_PU")
@SequenceGenerator(name="Ajustes", sequenceName="USER_PU.SEQ.AJJSTES", allocationSize =1)
@Data
public class Ajuestes implements Serializable{
    
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Ajustes")
@Column(name="ID_AJUSTE", unique=true, nullable=false)
private Integer idAjuste;

@Column(name="TIPO")
private String tipo;

@Column(name="LLAVE")
private String llave;

@Column(name="VALOR")
private String valor;

@Column(name="DESCRIPCION")
private String descripcion;

@Column(name="ALCANCE")
private String alcance;

}

Lo que necesito es actualizar en la tabla Valores el campo valor, tengo un método que recibe 2 parámetros, los cuales pueden ser modificados, ya sea los 2, o sólo 1, pero cada parámetro tiene su llave, por ejemplo en las tablas que puse en el campo LLAVE están PRUEBA_COMPONENTE_A y PRUEBA_MODULO_A y tienen un valor 30 y 60 respectivamente, entonces mi método recibirá los nuevos valores para esas llaves, puede que solo quieran actualizar 1 llave o las 2 y estas deben reflejarse en el campo Valor

Tengo el siguiente método pero solo actualiza el valor de una llave , como le puedo hacer para actualizar los valores de las 2 llaves si es que se requiere, o si son más campos por ejemplo 5 y puede que se quiera actualizar los 5 o solo 3, como se haria??

@Stateless
@LocalBean
public class PruebaOperacion{

 @PersistenceContext(unitName = "USER_PU")
  private EntityManager entityManager;
 
  @Interceptors(CheckpointMonitor.class)
  public void operacionActualizar(Integer componente, Integer modulo){
  
    StringBuilder updateStr = new StringBuilder("UPDATE Valores va SET ");
    updateStr.append("va.valor = :componenteParam");
    updateStr.append("WHERE va.ajustes.idAjuste =(SELECT ajus.idAjuste FROM Ajustes ajus WHERE ajus.tipo =:tipoParam AND ajus.llave = :llaveParam)");
    entityManager.clear();
    
    final Query query = entityManager.createQuery(updateStr.toString());
    query.setParameter("componenteParam", componente);
    query.setParameter("tipoParam", "NEW");
    query.setParameter("llaveParam", "PRUEBA_COMPONENTE_A");
    query.excecuteUpdate();
    entityManager.flush();
  
  }
 
}

O de que otra manera puedo hacer esa actualización de parámetros?

One Answer

Answered by JLazar0 on December 16, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP