Вставка символа пробела в базу данных H2 - PullRequest
0 голосов
/ 21 июня 2019

Я хочу сохранить символьную сущность в базе данных H2.Атрибутом этого буквенного объекта является символьный объект Java.

Все работает, как и ожидалось.У меня просто проблема в том, что я не могу заставить его вставить объект с символом пробела ('' код ASCII 32dec), используя Java PreparedStatement.Каким-то образом обрезка всегда вызывается во входной строке при вставке, в результате чего символ сохраняется в базе данных как ''.

Мой код вставки выглядит следующим образом:

PreparedStatement statement =
             context.getConnection().prepareStatement("insert into DLM.ALPHABET_CHARACTER"
                 + " (ID, KEYBOARD_POSITION, SORT_POSITION, UNICODE_CHAR, PRODUCT_FAMILY)"
                 + " values(?, ?, ?, ?, ?)");
statement.setLong(1, character.getId());
statement.setInt(2, character.getKeyboardPosition());
statement.setInt(3, character.getSortPosition());
statement.setString(4, String.valueOf(character.getUnicodeChar()));
statement.setString(5, alphabet.getProductFamily().name());
statement.execute();

Java генерируетследующий SQL-запрос от него:

insert into DLM.ALPHABET_CHARACTER (ID, KEYBOARD_POSITION, SORT_POSITION, UNICODE_CHAR, PRODUCT_FAMILY) 
values(0, 0, 0, ' ','PRODUCTA');

Для более высоких символов Ascii, например, becomes, это становится:

insert into DLM.ALPHABET_CHARACTER (ID, KEYBOARD_POSITION, SORT_POSITION, UNICODE_CHAR, PRODUCT_FAMILY) 
values(0, 0, 0, STRINGDECODE('\u9f3e'),'PRODUCTA');

Редактировать:

Я обнаружил следующее:

  • Если я выполняю вставку с Java, я всегда получаю пустое поле ячейки.Независимо от того, использую ли я '' или STRINGDECODE ('\ u0020')
  • Если я вручную выполню вставку для символа пробела (используя соединение h2 моей IDE) и использую STRINGDECODE ('\ u0020'),все работает нормально
  • Если я выполняю его вручную с помощью '', это также приводит к пустому полю ячейки

Я понятия не имею, как решить эту проблему.

Код Enity:

@Entity
@Cacheable
@Table(name = "alphabet_character")
public class AlphabetCharacterEntity {

  @Id
  @Column(updatable = false)
  @GeneratedValue(generator = "localCounter")
  @GenericGenerator(name = "localCounter",
      strategy = "LocalCounterGenerator")
  private Long id;

  private Integer keyboardPosition;

  private Integer sortPosition;

  private Character unicodeChar;

  @Enumerated(EnumType.STRING)
  private ProductFamily productFamily;
}

JPA создает следующую базу данных SQL для этой сущности:

create table dlm.alphabet_character (id bigint not null, keyboard_position integer, 
product_family varchar(255), sort_position integer, unicode_char char(255),
 primary key (id));
...