web-dev-qa-db-ja.com

JPAでカスタムIDを生成する方法

jPAでカスタムIDを生成したいのですが、テーブルの主キーである必要があります。 this のようなhibernateを使用してカスタムIDを作成する多くの例がありますが、JPAで同じ実装が必要です。IDはSTAND0001のような英数字である必要があります

ありがとう。

8
Amol Raje

次のように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;
}
}
9
Bara' ayyash