Используя В спящем режиме 3.3.1 и В спящем режиме Аннотации 3.4, база данных является DB2/400 V6R1, выполняя это на WebSphere 7.0.0.9
У меня есть следующий класс
@Entity
public class Ciinvhd implements Serializable {
@Id
private String ihinse;
@Id
@Column(name="IHINV#")
private BigDecimal ihinv;
....
}
По причинам я не могу фигурировать, Быть в спящем режиме, игнорирует указанное имя столбца и использует 'ihinv' для генерации SQL:
select
ciinvhd0_.ihinse as ihinse13_,
ciinvhd0_.ihinv as ihinv13_,
...
Который, конечно, дает мне следующую ошибку:
Column IHINV not in table CIINVHD
Править: Я переключился, уровень журнала в спящем режиме для ОТЛАДКИ, и я вижу, что он не обрабатывает аннотацию столбца для того поля. Попробованный несколько случайных вещей это просто не работает.
Кто-либо имел эту проблему прежде? У меня есть другие объекты, которые очень подобны в способе, которым они используют # в своих именах полей базы данных и который является частью PK, и у меня нет этой проблемы с ними.
Вы можете попробовать какой-нибудь тип цитирования:
Например:
@Column(name="`IHINV#`")
или
@Column(name="'IHINV#'")
Другой вариант - это копаться в исходном коде Диалект гибернации для DB2 и посмотреть, содержит ли он что-нибудь полезный.
Конечно, проще всего было бы удалить хэш из имени столбца, если это возможно.
Я подозреваю, что проблема заключается в хеш-коде в имени столбца. Подобный вопрос на форумах спящего режима предполагает, что здесь могут быть полезны обратные кавычки.