hi all,
I am developing a site with seam framework. This site has a task to be processed and then save 2 million records in a sql server database.
When running this task, just save the rows in the database takes about 2 hours.
there is any way to do a bulk insert with jpa?
this is my entity:
Code:
@Entity
@Table(name = "VALOR_REPOSICION_UNITARIO")
@SequenceGenerator(name = "SEQ_VALOR_REPOSICION_UNITARIO", sequenceName = "SEQ_VALOR_REPOSICION_UNITARIO")
public class ValorReposicionUnitario implements Serializable{
      
   private static final long serialVersionUID = 8987003299106089345L;
        private Long id;
        private String sku;
   private String curvatura;
   private Integer packingReal;
   private Integer materialPacking;
        ...
        @Id
   @Column(name = "VRU_ID", precision = 10, scale = 0)
   @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_VALOR_REPOSICION_UNITARIO")
   public Long getId() {
      return id;
   }
   
   public void setId(Long id) {
      this.id = id;
   }
        ...
   @Column(name = "SKU")
   public String getSku() {
      return sku;
   }
   public void setSku(String sku) {
      this.sku = sku;
   }
        ...
and to persist
Code:
   @PersistenceContext
        private EntityManager entityManager;
   private void prepareToSave(
         List<ValorReposicionUnitario> valoresReposicionUnitario) {
      List<ValorReposicionUnitario> valores = new ArrayList<ValorReposicionUnitario>();
      
      int counter = 0;
      for(ValorReposicionUnitario valor : valoresReposicionUnitario){
         
         valores.add(valor);
         counter++;
         
         valor.setValorReposicionUsuario(valor.getValorReposicionCurvatura());
         
         if(counter == 1000){
            
            save(valores);            
            valores = new ArrayList<ValorReposicionUnitario>();
            counter = 0;
         }            
      }
      
      if(valores.size() > 0)
         save(valores);   
      
   }
   @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
   private void save(List<ValorReposicionUnitario> valores) {
      int cantidad = 0;
      for(ValorReposicionUnitario valor : valores){         
         
         if(!Validaciones.isNull(valor.getValorReposicionCurvatura()))
            cantidad = valor.getValorReposicionCurvatura();
                  
         valor.setValorReposicionCurvatura(cantidad<0?0:cantidad);
         
         entityManager.persist(valor);   
      }
      
   }
thanks!