Agregar campos autoincrementables, renombrar campos
Objetivo
Cambiar el campo idarticulo que es un String combinado, por un campo Integer autoincrementable.
Actualizar los entitys Referenciados con el nuevo valor.
Cambiar el nombre del atributo actual idarticulo que es String por el nombre de código.
Imaginemos que contamos con tres colecciones.
Coleccion
Articulo
Ordendetalle
Inventario

Pasos:
Agregar en los entity el atributo numero en las tres colecciones(Articulo, Inventario, Ordendetalle. Facturadetalle)
En Articulo usar un método que actualice con un autoincrementable el valor del nuevo campo numero
Recorrer la coleccion de Inventario y actualizar el campo numero con el valor correspondiente del articulo comparando por idarticulo de ambas colecciones.
Recorrer la coleccion de Ordendetalle y actualizar el campo numero con el valor correspondiente del articulo comparando por idarticulo de ambas colecciones.
Renombrar el campo idarticulo en Articulo con el nombre de codigo.
Renombrar el campo numero por idarticulo en Articulo
Eliminar el campo idarticulo en Inventario
Renombrar el campo numero por idarticulo en Inventario
Eliminar el campo idarticulo en Ordendetalle
Renombrar el campo numero por idarticulo en Ordendetalle
En los entitys @Referenced cambiar el javatype="String" por javatype="Integer"
@Referenced(documment = "Articulo",
repository = "com.avbravo.storeejb.repository.ArticuloRepository",
field = "idarticulo", javatype = "String", lazy = false)
Por
@Referenced(documment = "Articulo",
repository = "com.avbravo.storeejb.repository.ArticuloRepository",
field = "idarticulo", javatype = "Integer", lazy = false)
Entitys
public class Articulo {
@Id
private String idarticulo;
private String descripcion;
@Referenced(documment = "Grupoarticulo",
repository = "com.avbravo.storeejb.repository.GrupoarticuloRepository",
field = "idgrupoarticulo", javatype = "Integer", lazy = false)
private Grupoarticulo grupoarticulo;
@Referenced(documment = "Proveedor",
repository = "com.avbravo.storeejb.repository.ProveedorRepository",
field = "idproveedor", javatype = "String", lazy = false)
private Proveedor proveedor;
@Referenced(documment = "Modelo",
repository = "com.avbravo.storeejb.repository.ModeloRepository",
field = "idmodelo", javatype = "Integer", lazy = false)
private Modelo modelo;
@Referenced(documment = "Tamano",
repository = "com.avbravo.storeejb.repository.TamanoRepository",
field = "idtamano", javatype = "Integer", lazy = false)
private Tamano tamano;
@Referenced(documment = "Color",
repository = "com.avbravo.storeejb.repository.ColorRepository",
field = "idcolor", javatype = "String", lazy = false)
private Color color;
@Referenced(documment = "Bodega",
repository = "com.avbravo.storeejb.repository.BodegaRepository",
field = "idbodega", javatype = "String", lazy = false)
private Bodega bodega;
private Double costo;
private Double precioventapublico;
private Double precioventacredito;
private Integer cantidad;
private Integer reorden;
private String activo;
@Embedded
private List<UserInfo> userInfo;
public Articulo() {
}
}
public class Inventario {
@Id
private Integer idinventario;
@Referenced(documment = "Articulo",
repository = "com.avbravo.storeejb.repository.ArticuloRepository",
field = "idarticulo", javatype = "String", lazy = false)
private Articulo articulo;
private String id;
private String tipoid;
private Integer cantidad;
@Embedded
private List<UserInfo> userInfo;
}
public class Ordendetalle {
@Id
private Integer idordendetalle;
@Referenced(documment = "Orden", repository = "com.avbravo.storeejb.repository.OrdenRepository",
field = "idorden", javatype = "Integer", lazy = false)
private Orden orden;
@Referenced(documment = "Articulo", repository = "com.avbravo.storeejb.repository.ArticuloRepository",
field = "idarticulo", javatype = "String", lazy = false)
private Articulo articulo;
private Integer cantidadanterioremisor;
private Integer cantidadanteriorreceptor;
private Integer cantidad;
@Embedded
private List<UserInfo> userInfo;
public Ordendetalle() {
}
}
1.Agregamos el atributo numero a los entitys (Articulo, Inventario,Ordendetalle,Facturadetalle)
private Integer numero;

2. Ejecutar el Método

Genera el numero en Articulo y actualiza el campo numero con el correspondiente al articulo en Ordendetalle, Inventario.
public String generarNumeros() {
try {
List<Articulo> list = new ArrayList<>();
list = articuloRepository.findAll();
for (Articulo a : list) {
Integer id = autoincrementableStoreejbServices.getContador("articulo");
a.setNumero(id);
articuloRepository.update(a);
}
//Actulizar Inventario
List<Inventario> listInventario = inventarioRepository.findAll();
listInventario.forEach((i) -> {
List<Articulo> articuloList = articuloRepository.findBy("idarticulo",i.getArticulo().getIdArticulo());
if (!articuloList.isEmpty()) {
i.setNumero(articuloList.get(0).getNumero());
inventarioRepository.update(i);
}
});
//Actulizar Ordendetalle
List<Ordendetalle> listOrdendetalle=ordendetalleRepository.findAll();
listOrdendetalle.forEach((o) -> {
List<Articulo> articuloList = articuloRepository.findBy("idarticulo",o.getArticulo().getIdArticulo());
if (!articuloList.isEmpty()) {
o.setNumero(articuloList.get(0).getNumero());
ordendetalleRepository.update(o);
}
});
JsfUtil.successMessage("Se generaron los numeros y se actualizaron ");
} catch (Exception e) {
JsfUtil.errorMessage("generarNumeros()" + e.getLocalizedMessage());
}
return "";
}
3. Renombrar el atributo idarticulo por codigo en Articulo
db.articulo.updateMany({ }, {$rename:{"idarticulo":"codigo"}})
4. Renombrar numero por idarticulo en Articulo
db.articulo.updateMany({ }, {$rename:{"numero":"idarticulo"}})
5. Eliminar el atributo articulo.idarticulo de Inventario
db.inventario.update({}, {$unset: {"articulo": 1}}, {multi: true})
6. Eliminar el atributo articulo.idarticulo de Ordendetalle
db.ordendetalle.update({}, {$unset: {"articulo": 1}}, {multi: true})
7. Renombrar numero por idarticulo en Inventario
db.inventario.updateMany({ }, {$rename:{"numero":"articulo.idarticulo"}})
8. Renombrar numero por idarticulo en Inventario
db.ordendetalle.updateMany({ }, {$rename:{"numero":"articulo.idarticulo"}})
9. Cambiar el @Referenced(type="String"... en Inventario
por
@Referenced(type="Integer"...
10. Cambiar el @Referenced(type="String"... en Ordendetalle
por
@Referenced(type="Integer"...
Last updated
Was this helpful?