JPA и BigInteger терпят неудачу - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь сохранить SHA256 ha sh как числовое значение, что кажется оптимальным способом сделать это из пробела и индексации POV. Я использую JPA с простым определением поля:

@NonNull
private BigInteger mybiginteger;

Однако он отказывается вставлять значение.

Я использую базу данных H2 во время модульных тестов, и теперь, когда я 'Я добавил значение BigInteger в JPA, это не удается

Caused by: org.h2.jdbc.JdbcSQLDataException: Value too long for column "MYBIGINTEGER DECIMAL(19, 2)": "-12804752987762098394035772686106585063470084017442529046078187006797464553387.00 (79)"; SQL statement:

Пропуск тестовых случаев и попытка его с помощью Postgres также не удается с

Caused by: org.postgresql.util.PSQLException: ERROR: numeric field overflow
  Detail: A field with precision 19, scale 2 must round to an absolute value less than 10^17.

JPA создал это как число Поле c (19,2) согласно инструментам БД. Я могу вручную изменить определение столбца, и оно работает, но не как сделать его переносимым между H2 и PSQL.

Как правильно сохранить BigInteger в базе данных H2 / PSQL с помощью JPA? Кроме того, почему он позволяет использовать два десятичных знака для типа BigInteger?

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Я установил тип столбца с помощью

@Column(precision = 100, scale = 0)

Точность 100, вероятно, слишком высока, но я рассчитаю правильное значение позже.

0 голосов
/ 16 июня 2020

Я бы не согласился, что BigInteger - правильный тип для Ha sh. Хотите делать арифмети c с помощью ha sh? Я так не думаю. Например,

Java s MessageDigest даст вам массив byte[] с ha sh. Вы можете эффективно сопоставить байтовый массив как двоичный столбец / столбец BLOB. Другой переносимый способ - сохранить его как строку в кодировке base64.

@Lob
byte[] hash;

Предполагая Postgresql, вы можете проверить требования к пространству здесь: https://www.postgresql.org/docs/current/datatype.html

Для столбца типа bytea потребуется до 32 + 4 байта. Вы можете создать indizes et c. для этого типа столбца.

...