springhibernatejpaspring-bootspring-data-jpa

How to generate Custom Id in JPA


i want generate Custom Id in JPA it must be primary key of table. there are many examples to create Custom Id using hibernate like this i want same implementation but in JPA.The id must be alphanumeric like STAND0001

Thanks.


Solution

  • You can do it using GenericGenerator like this :

     @Entity
    public class Client {
    
        @Id
        @GenericGenerator(name = "client_id", strategy = "com.eframe.model.generator.ClientIdGenerator")
        @GeneratedValue(generator = "client_id")  
        @Column(name="client_id")
        private String clientId;
    }
    

    and the custom generator class (will add prefix to the ID, you can make it do what you like):

    public class ClientIdGenerator implements IdentifierGenerator {
    
    @Override
    public Serializable generate(SessionImplementor session, Object object)
            throws HibernateException {
    
        String prefix = "cli";
        Connection connection = session.connection();
    
        try (Statement statement=connection.createStatement();
                ResultSet rs=statement.executeQuery("select count(client_id) as Id from Client")) {
            if(rs.next())
            {
                int id=rs.getInt(1)+101;
                String generatedId = prefix + new Integer(id).toString();
                return generatedId;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
        return null;
    }
    }