Я использую Hibernate 4.0.0.Final в качестве поставщика сохраняемости JPA для приложения, с базой данных Oracle 11g (созданной с кодировкой UTF-8) и Oracle WebLogic 11g в качестве сервера приложений.В persistence.xml
настроен диалект: org.hibernate.dialect.OracleDialect
.
. В моих сущностях я сопоставляю строковые поля следующим образом:
@Column(length=20)
private String description;
Я позволяю JPA обрабатывать созданиетаблицы в базе данных.К моему удивлению, в базе данных определение столбца для предыдущего поля выглядит следующим образом:
DESCRIPTION VARCHAR2(80 BYTE)
Когда я вставляю значение в поле description
(используя консоль SQL, а не из приложения),Я могу вставить до 80 символов, а не 20, как я ожидал.
В чем здесь проблема?Я предполагаю, что определение столбца создано с 80 байтами для разрешения хранения символов UTF-8, но оно не соответствует ожидаемой максимальной длине поля на уровне базы данных.В идеале я хотел бы, чтобы поле выглядело так:
DESCRIPTION VARCHAR2(20 CHAR)
Но я не знаю, как настроить Hibernate для отображения строкового поля с CHAR
, а не BYTE
.Есть идеи?