0

How to generate string id like hibernate long like this:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;


@Id
private String id

I mean, I want to get String values like "1", "2", "3", etc..

2 Answers2

0

See this to understand your problem https://thoughts-on-java.org/jpa-generate-primary-keys/

sergkk
  • 118
  • 10
0

@GeneratedValue(strategy = GenerationType.IDENTITY) cannot be used with String type. So, if you want to use String as ID, you have to assign it manually.

A possible solution is to have custom id generator:

@Id
@GenericGenerator(name = "sequence_id", strategy = "com.xyz.IdGenerator")
@GeneratedValue(generator = "sequence_id")  
@Column(name="Id")
private String Id;

Id Generator class:

package com.xyz;

import java.io.Serializable;
import java.sql.*;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.id.IdentifierGenerator;

public class IdGenerator implements IdentifierGenerator{

    @Override
    public Serializable generate(SessionImplementor session, Object object)
            throws HibernateException {


        Connection connection = session.connection();

        try {
            Statement statement=connection.createStatement();

            ResultSet rs=statement.executeQuery("select count(Id) from dbo.TableName");

            if(rs.next())
            {
                int id=rs.getInt(1);
                return new Integer(id).toString();
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }

        return null;
    }

}