¿Como crear un correlativo con JPA?

Buenas estoy trabajando con NetBeans Platform creando un sistema de Control de Almacen tengo la siguiente tabla:

CREATE TABLE `maClasifProd` (
  `codClasifP` char(6) NOT NULL,
  `descClasifP` varchar(45) DEFAULT NULL,
  `modeloClasifP` varchar(30) DEFAULT NULL,
  `marcClasifP` varchar(25) DEFAULT NULL,
  `clasifContClasifP` char(7) DEFAULT NULL,
  `grpMatClasifP` char(2) DEFAULT NULL,
  `descGrpClasifP` varchar(40) DEFAULT NULL,
  `clasMatClasifP` varchar(30) DEFAULT NULL,
  `nroCorrelClasifP` char(4) DEFAULT NULL,
  `clasifGcialClasifP` varchar(9) DEFAULT NULL,
  PRIMARY KEY (`codClasifP`),
  UNIQUE KEY `codClasifP_UNIQUE` (`codClasifP`),
  UNIQUE KEY `nroCorrelClasifP_UNIQUE` (`nroCorrelClasifP`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Como veran el PK es codClasifP y el numero correlativo que deseo es "nroCorrelClasifP". Digamos que mi cod = 12 quiero crear un correlativo que empieze en 400__, si registro un producto el correlativo deberia ser 40001, creo otro producto y deberia ser 40002 y asi sucesivamente.
Este es el codigo de mi DataModel:

public class DataModel {
   
    @SuppressWarnings("unchecked")
    public static List<MaClasifProd> getClasifP(){
        Installer.EM.getTransaction().begin();
        Query q = Installer.EM.createQuery("SELECT m FROM MaClasifProd m");
        List<MaClasifProd> list = q.getResultList();
        Installer.EM.getTransaction().commit();
       
        return list;
    }
    //-----No estoy seguro si esto funcionara
    //@SuppressWarnings("unchecked")
    //public static List<MaClasifProd> getCorrelClasifP(){
    //    Installer.EM.getTransaction().begin();
     //   Query q = Installer.EM.createQuery("SELECT nroCorrelClasifP FROM MaClasifProd ORDER BY nroCorrelClasifP desc limit 1");
      //  List<MaClasifProd> correl = q.getResultList();
      //  Installer.EM.getTransaction().commit();
       
       // return correl;
    //}
   
    public static void updateClasifP(MaClasifProd maClasifProd){
        Installer.EM.getTransaction().begin();
        Installer.EM.persist(maClasifProd);
        Installer.EM.getTransaction().commit();
    }
   
    public static void insertClasifP(MaClasifProd maClasifProd){
        updateClasifP(maClasifProd);
    }
   
    public static void deleteClasifP(MaClasifProd maClasifProd){
        Installer.EM.getTransaction().begin();
        Installer.EM.remove(maClasifProd);
        Installer.EM.getTransaction().commit();
    }
   
}

Y este es el codigo de mi JFrame por decir, en mi caso como trabajo con NetBeans Platform para mi seria mi Window:

public final class ClasifacionProductosTopComponent extends TopComponent {

    private ClasificTableModel model = new ClasificTableModel();
   
    public ClasifacionProductosTopComponent() {
        initComponents();
        setName(Bundle.CTL_ClasifacionProductosTopComponent());
        setToolTipText(Bundle.HINT_ClasifacionProductosTopComponent());

        tblClasifP.setModel(model);
}
//------------METODOS-----------------
    private void verClasifPActionPerformed(java.awt.event.ActionEvent evt){
        if(tblClasifP.getSelectedRowCount()>0){
            MaClasifProd maClasifProd = ClasificacionVentanaDialog.verClasifP(model.getRow(tblClasifP.getSelectedRow()));
            if(maClasifProd != null){
                DataModel.updateClasifP(maClasifProd);
                model.fireTableDataChanged();
            }
        }
        tblClasifP.requestFocus();
    }
    //--------FIN DE LOS METODOS---------
private void btnIngresarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        MaClasifProd maClasifProd = ClasificacionVentanaDialog.newClasifP();
        try {
            if(maClasifProd != null){
                DataModel.insertClasifP(maClasifProd);
                model.getData().add(maClasifProd);
                model.fireTableDataChanged();
            }
        } catch (Exception e) {            
        }
        //Devolvemos el foco a la tabla
        tblClasifP.requestFocus();
        //areasRes.getRowCount()-1 --> Para indicar que es la
        //ultima fila ingresada
        tblClasifP.changeSelection(tblClasifP.getRowCount()-1, 0, false, false);
    }                                          

    private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        if(tblClasifP.getSelectedRowCount() > 0){
            try {
                MaClasifProd maClasifProd = ClasificacionVentanaDialog.editClasifP(model.getRow(tblClasifP.getSelectedRow()));
                if(maClasifProd != null){
                    DataModel.updateClasifP(maClasifProd);
                    model.fireTableDataChanged();
                } else {
                    JOptionPane.showMessageDialog(null, "Error");
                }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Error al modificar");
            }
        }
        tblClasifP.requestFocus();
        //areasRes.changeSelection(areasRes.getRowCount()-1, 0, false, false);
    }
private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {                                            

        try {

            if(tblClasifP.getSelectedRowCount() > 0){
                MaClasifProd maClasifProd = model.getRow(tblClasifP.getSelectedRow());
                DataModel.deleteClasifP(maClasifProd);
                model.getData().remove(maClasifProd);
                model.fireTableDataChanged();
            }
            System.out.println("Eliminacion satisfactoria");

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error al eliminar");
        }

        tblClasifP.requestFocus();
    }
@Override
    public void componentOpened() {
        // TODO add custom code on component opening
        model.getData().clear();
        model.getData().addAll(DataModel.getClasifP());
        model.fireTableDataChanged();
    }

    @Override
    public void componentClosed() {
        // TODO add custom code on component closing
    }

    void writeProperties(java.util.Properties p) {
        // better to version settings since initial version as advocated at
        // <a href="http://wiki.apidesign.org/wiki/PropertyFiles
" title="http://wiki.apidesign.org/wiki/PropertyFiles
">http://wiki.apidesign.org/wiki/PropertyFiles
</a>        p.setProperty("
version", "1.0");
        // TODO store your settings
    }

    void readProperties(java.util.Properties p) {
        String version = p.getProperty("version");
        // TODO read your settings according to their version
    }
   
    private static final class ClasificTableModel extends AbstractTableModel{

        private String[] columns = {"Código", "Descripción","GP","Corr","Cla.Con","Clase Material"};
        private List<MaClasifProd> data = new ArrayList<MaClasifProd>();
       
        public MaClasifProd getRow(int row){
            return data.get(row);
        }
       
        @Override
        public int getRowCount() {
            return data.size();
        }

        @Override
        public int getColumnCount() {
            return columns.length;
        }

        @Override
        public String getColumnName(int col){
            return columns[col];
        }
       
        @Override
        public Object getValueAt(int row, int col) {
            MaClasifProd maClasifP = data.get(row);
            switch(col){
                case 0: return maClasifP.getCodClasifP();
                case 1: return maClasifP.getDescClasifP();
                case 2: return maClasifP.getGrpMatClasifP();
                case 3: return maClasifP.getNroCorrelClasifP();
                case 4: return maClasifP.getClasifContClasifP();
                case 5: return maClasifP.getClasMatClasifP();
            }
            return "";
        }
       
        public List<MaClasifProd> getData(){
            return data;
        }
       
    }  

Me gustaria saber como crear el correlativo en Persistencias(JPA). Anteriormente ya cree en correlativos pero en Eclipse sin persistencias.

     public void correlativo(){
                try{
                        Statement stmt=proy.con.con.createStatement();
                        ResultSet rs=stmt.executeQuery("select codProducto from producto order by codProducto desc limit 1");
                        while(rs.next()){
                                int codigo=rs.getInt("codProducto")+1;
                                txtCodigo.setText(""+codigo);
                        }
                }catch(SQLException e){}
        }