У меня возникла проблема с запросом базы данных Derby. Я использую Hibernate с JPA. Проблема связана (вероятно) с булевыми столбцами. Каждый запрос заканчивается ошибкой:Hibernate + Derby: Сравнение между «BOOLEAN» и «INTEGER» не поддерживается
org.hibernate.exception.SQLGrammarException: Сравнение между «BOOLEAN» и «INTEGER» не поддерживается. Типы должны быть сопоставимы. Строковые типы также должны иметь соответствующую сортировку. Если параметры сортировки не совпадают, то возможным решением является приведение операнды, чтобы заставить их сортировки по умолчанию (например ВЫБРАТЬ имя_таблицы FROM sys.systables WHERE CAST (имя_таблицы AS VARCHAR (128)) = «T1»)
Ниже может найти пример кода и конфигурации. Для упрощения чтения образцы упрощены. Вот моя JPA сущность:
@Entity
public abstract class Task implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
protected long id;
@Column
protected boolean deleted;
public long getId() {
return id;
}
public boolean isDeleted() {
return deleted;
}
public void setId(long id) {
this.id = id;
}
public void setDeleted(boolean deleted) {
this.deleted = deleted;
}
@Override
public int hashCode() {
return id;
}
@Override
public boolean equals(Object object) {
if (object == null) {
return false;
}
if (!this.getClass().equals(object.getClass())) {
return false;
}
EntityObject other = (EntityObject) object;
if (this.id != other.id) {
return false;
}
return true;
}
@Override
public String toString() {
return "EntityObject[ id=" + id + " ]";
}
}
Мой JPA запрос:
SELECT t FROM Task t WHERE deleted = false
Моя конфигурация JPA:
<persistence-unit name="PU1" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/myapp</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
</properties>
</persistence-unit>
Что не так? Как это исправить? Спасибо за любые предложения.
Какого типа данных Task.deleted в дерби? Это немного длинный снимок, но, возможно, hibernate.hbm2ddl.auto = update не применяет изменения типа данных. – samlewis
Task.deleted является логическим в базе данных Derby. Схема базы данных обновляется до уровня сущностей. – Rafal