Как создать идентификатор строки в спящем режиме, как долго? - PullRequest
0 голосов
/ 19 мая 2019

Как сгенерировать строковый идентификатор, например, длинный спящий, как это:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;


@Id
private String id

Я имею в виду, я хочу получить строковые значения, такие как "1", "2", "3" и т. Д.

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

@GeneratedValue(strategy = GenerationType.IDENTITY) нельзя использовать со строковым типом.Таким образом, если вы хотите использовать String в качестве идентификатора, вам нужно назначить его вручную.

Возможное решение - использовать собственный генератор идентификаторов:

@Id
@GenericGenerator(name = "sequence_id", strategy = "com.xyz.IdGenerator")
@GeneratedValue(generator = "sequence_id")  
@Column(name="Id")
private String Id;

Класс Id Generator:

package com.xyz;

import java.io.Serializable;
import java.sql.*;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.id.IdentifierGenerator;

public class IdGenerator implements IdentifierGenerator{

    @Override
    public Serializable generate(SessionImplementor session, Object object)
            throws HibernateException {


        Connection connection = session.connection();

        try {
            Statement statement=connection.createStatement();

            ResultSet rs=statement.executeQuery("select count(Id) from dbo.TableName");

            if(rs.next())
            {
                int id=rs.getInt(1);
                return new Integer(id).toString();
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }

        return null;
    }

}
0 голосов
/ 19 мая 2019

Смотрите это, чтобы понять вашу проблему https://thoughts -on-java.org / jpa-generate-primary-keys /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...