Генерация пользовательских длинных идентификаторов в спящем режиме - PullRequest
0 голосов
/ 24 сентября 2018

Есть ли какой-нибудь способ создать длинный идентификатор пользователя в качестве первичного ключа в спящем режиме?Я прочитал этот hibernate ID , но он работает, когда тип идентификатора - String.Мой желаемый идентификатор выглядит как "yyyymm00001" ex: 20180900001;Здесь метод ниже возвращает желаемый формат, но в строковом типе.Как я могу сделать это как длинный тип?

@Override
    public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
           Serializable result = null;
            Connection connection = null;
            Statement statement = null;
            ResultSet resultSet = null;


            String year= String.valueOf(Calendar.getInstance().get(Calendar.YEAR));
            String month= String.format("%02d",Calendar.getInstance().get(Calendar.MONTH)+1);
            try {
                connection = session.connection();
                statement = connection.createStatement();
                try {

                     statement.executeUpdate("UPDATE " + DEFAULT_SEQUENCE_NAME + " SET next_val=LAST_INSERT_ID(next_val+1)");
                    resultSet = statement.executeQuery("SELECT next_val FROM  " + DEFAULT_SEQUENCE_NAME);
                } catch (Exception e) {

                    System.out.println("In catch, cause : Table is not available.");

                    statement.executeUpdate("UPDATE " + DEFAULT_SEQUENCE_NAME + " SET next_val=LAST_INSERT_ID(next_val+1)");
                    resultSet = statement.executeQuery("SELECT next_val FROM  " + DEFAULT_SEQUENCE_NAME);

                }
                if (resultSet.next()) {

                    int nextValue = resultSet.getInt(1);
                    String suffix = String.format("%05d", nextValue);
                    result = year.concat(month).concat(suffix);
                    System.out.println("Custom generated sequence is : " + result);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return result;
    }

1 Ответ

0 голосов
/ 24 сентября 2018

, чтобы исправить эту проблему, вы должны добавить в сущность эти аннотации и сделать тип Long или Integer для @ Id

@Id
@Column(name = Contact.ENCOIDFSYS)
@GeneratedValue(generator = IdfsysGeneratorDefinition.NAME)
@GenericGenerator(name = IdfsysGeneratorDefinition.NAME, strategy = IdfsysGeneratorDefinition.CLASS_NAME, parameters = {  })
private Integer id;

, зная, что

public static final String CLASS_NAME = "com.sybaway.generators.hibernate.HibernateIdfsysGenerator";
public static final String NAME = "idfsysGenerator";

И в классе генератора гибернации, Добавьте это преобразование в Long

result = Long.parseLong(year.concat(month).concat(suffix));

вместо:

result = year.concat(month).concat(suffix);

Дайте мне знать, если все хорошо

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