web-dev-qa-db-fra.com

Comment générer un ID personnalisé dans JPA

je veux générer un ID personnalisé dans JPA, il doit s'agir de la clé primaire de la table. il existe de nombreux exemples pour créer un ID personnalisé en utilisant la mise en veille prolongée comme this je veux la même implémentation mais en JPA. L'identifiant doit être alphanumérique comme STAND0001

Merci.

8
Amol Raje

Vous pouvez le faire en utilisant GenericGenerator comme ceci:

 @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;
}

et la classe du générateur personnalisé (ajoutera un préfixe à l'ID, vous pouvez le faire faire ce que vous aimez):

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;
}
}
9
Bara' ayyash