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!