如何在JPA中生成自定义ID

时间:2017-11-13 07:26:31

标签: spring hibernate jpa spring-boot spring-data-jpa

我希望在JPA中生成自定义ID,它必须是表的主键。 有许多示例使用hibernate创建自定义ID,如this 我希望在JPA中使用相同的实现.id必须是字母数字,如STAND0001

感谢。

1 个答案:

答案 0 :(得分:6)

你可以使用GenericGenerator这样做:

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

和自定义生成器类(将为ID添加前缀,您可以使它按照您喜欢的方式执行):

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