Я хочу сохранить символьную сущность в базе данных 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));