2015-10-28 117 views
1

我堅持實體到MySQL數據庫。我的要求是存儲ID爲BR01,BR02,...等,而不是存儲爲1,2,..等。休眠 - 自定義ID生成

我如何將BR01,BR02等存儲爲ID?

我知道序列不支持mysql數據庫。

我的實體類如下:

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 + "]"; 
    } 

} 
+0

您確定要在表中最大的99行?或者您的需求是否超出兩位數? – Deltharis

+0

'@ GeneratedValue'每次添加分支時刪除此批註並設置標識。 –

+0

我的要求比例超過兩位數 – Devloper

回答

1

您可以擴展org.hibernate.id.enhanced.SequenceStyleGenerator並將其與註釋@GenericGenerator一起使用。

0

編寫自定義生成器類,並將邏輯放在數據庫中獲取最大id,然後您將解析該id的數字,並將該數字轉換爲整數並對該數字進行增量操作,然後再與您所需的前綴一起進行連接並返回級聯值。

寫這個邏輯在這裏

import org.hibernate.id.IdentifierGenerator; 

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

}