Derbyデータベースのクエリに問題があります。私はJPAでHibernateを使用しています。問題は(おそらく)ブール値の列に関連しています。各クエリはエラーで終了します:Hibernate + Derby: 'BOOLEAN'と 'INTEGER'の比較はサポートされていません
org.hibernate.exception.SQLGrammarException: 'BOOLEAN'と 'INTEGER'の比較はサポートされていません。タイプは同等でなければなりません。文字列型も照合順序が一致している必要があります。照合が一致しない場合は、オペランドをキャストしてデフォルトの照合順序にすることが考えられます(例:SELECT tablename FROM sys.systables WHERE CAST(tablename 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