hibernatejpa

How to generate Custom Id using hibernate while it must be primary key of table


Here is my pojo class

@Entity

public class Department {


@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)

@Column(name="Department_Id")

private Integer deptId;


@Column(name="Department_Name",unique=true,nullable=false)
private String deptName;


@Column(name="Department_Description")
@NotNull
private String deptDesc;
   //geters and setters

What I want is that department_id must be primary key of this Department table and entries for this key must be as DEP0001, DEP0002,DEP0003


Solution

  • Thank you everyone for your response...... finally i have done some changes in my Department class and used a class for generating ids........Here is my code

    @Entity
    public class Department {
    
    @Id
    @GenericGenerator(name = "sequence_dep_id", strategy = "com.xyz.ids.DepartmentIdGenerator")
    @GeneratedValue(generator = "sequence_dep_id")  
    @Column(name="Department_Id")
    private String deptId;
    
    @Column(name="Department_Name",unique=true,nullable=false)
    private String deptName;
    
    
    @Column(name="Department_Description")
    @NotNull
    private String deptDesc;
    
    //getters and setters
    

    DepartmentIdGenerator.java

    package com.xyz.ids;
    
    import java.io.Serializable;
    import java.sql.*;
    import org.hibernate.HibernateException;
    import org.hibernate.engine.spi.SessionImplementor;
    import org.hibernate.id.IdentifierGenerator;
    
    public class DepartmentIdGenerator implements IdentifierGenerator{
    
        @Override
        public Serializable generate(SessionImplementor session, Object object)
                throws HibernateException {
    
            String prefix = "DEP";
            Connection connection = session.connection();
    
            try {
                Statement statement=connection.createStatement();
    
                ResultSet rs=statement.executeQuery("select count(Department_Id) as Id from demo.Department");
    
                if(rs.next())
                {
                    int id=rs.getInt(1)+101;
                    String generatedId = prefix + new Integer(id).toString();
                    System.out.println("Generated Id: " + generatedId);
                    return generatedId;
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
    
            return null;
        }
    
    }