How to generate Custom Id in JPA

20,121

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;
}
}
Share:
20,121

Related videos on Youtube

Amol Raje
Author by

Amol Raje

Updated on July 09, 2022

Comments

  • Amol Raje
    Amol Raje 6 months

    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.

  • Marx
    Marx over 4 years
    GenericGenerator is from hibernate package, and the question was how to do that independently of JPA provicder
  • LalakaJ about 4 years
    @Marx I think you'll have to use the SessionCustomizer in EclipseLink. There is no mention of the said behavior in the JSR 338.

Related