如何在JPA中生成自定义ID

Amo*_*aje 7 spring hibernate jpa spring-data-jpa spring-boot

我想在JPA中生成自定义ID,它必须是表的主键.有很多例子可以创建自定义ID使用像Hibernate 这样 我想相同的实现,但在JPA.The ID必须是字母数字像STAND0001

谢谢.

Bar*_*ash 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;
}
Run Code Online (Sandbox Code Playgroud)

和自定义生成器类(将在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;
}
}
Run Code Online (Sandbox Code Playgroud)

  • GenericGenerator来自休眠包,问题是如何独立于JPA provicder来执行此操作 (5认同)
  • 在带有 Hibernate 5.6.9 的 Spring Boot 2.7 中,您必须使用 `SharedSessionContractImplementor` 而不是 `SessionImplementor` (2认同)