简体   繁体   中英

Hibernate - Custom Id Generation

I am persisting entity to mysql database. my requirement is to store id as BR01 , BR02 ,... etc. instead of storing as 1,2,.. etc.

how can i store id as BR01,BR02,.. etc?

I know sequence is not supported in mysql database.

my entity class is as follows :

package com.kabira.hrm.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
@Entity
@Table(name="branch")
public class Branch
{
    private Long id;
    private String country;
    private String state;
    private String city;
    private String address;
    private String phoneNumber;

    @Id
    @GeneratedValue 
    public Long getId()
    {
        return id;
    }
    public void setId(Long id)
    {
        this.id = id;
    }
    public String getCountry()
    {
        return country;
    }
    public void setCountry(String country)
    {
        this.country = country;
    }
    public String getState()
    {
        return state;
    }
    public void setState(String state)
    {
        this.state = state;
    }
    public String getCity()
    {
        return city;
    }
    public void setCity(String city)
    {
        this.city = city;
    }
    public String getAddress()
    {
        return address;
    }
    public void setAddress(String address)
    {
        this.address = address;
    }
    public String getPhoneNumber()
    {
        return phoneNumber;
    }
    public void setPhoneNumber(String phoneNumber)
    {
        this.phoneNumber = phoneNumber;
    }
    @Override
    public String toString()
    {
        return "Branch [id=" + id + "]";
    }

}

您可以扩展org.hibernate.id.enhanced.SequenceStyleGenerator并将其与@GenericGenerator批注一起使用。

You may want to check out a solution like this. Hibernate: How specify custom sequence generator class name using annotations? This way you make your own key generator.

Write custom generator class and put the logic there to fetch max id from db and you would parse number from that id and convert that number into an integer and make increment to that number and again concat with your required prefix and return concatenated value.

write this logic here

import org.hibernate.id.IdentifierGenerator;

public class MyGenerator implements IdentifierGenerator {@
 Override
    public Serializable generate(SessionImplementor session, Object object){
    // your logic comes here.
    }

 }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM