Java 为什么不能对ormlite中具有DataType.SERIALIZABLE的列执行isNotNull? 在Android上使用OrMLITE 4.48,考虑下面的用户表… @DatabaseTable(tableName=“users”) 公共类用户{ @DatabaseField(columnName=Column.UUID) 受保护字符串uuid; @DatabaseField(columnName=Column.FIRST\u NAME) 受保护字符串firstName=null; @DatabaseField(columnName=Column.LAST_NAME) 受保护字符串lastName=null; @DatabaseField(columnName=Column.ADDRESS,dataType=dataType.SERIALIZABLE) 受保护地址=空; // ... }

Java 为什么不能对ormlite中具有DataType.SERIALIZABLE的列执行isNotNull? 在Android上使用OrMLITE 4.48,考虑下面的用户表… @DatabaseTable(tableName=“users”) 公共类用户{ @DatabaseField(columnName=Column.UUID) 受保护字符串uuid; @DatabaseField(columnName=Column.FIRST\u NAME) 受保护字符串firstName=null; @DatabaseField(columnName=Column.LAST_NAME) 受保护字符串lastName=null; @DatabaseField(columnName=Column.ADDRESS,dataType=dataType.SERIALIZABLE) 受保护地址=空; // ... },java,android,ormlite,Java,Android,Ormlite,(Address类表示人类可读的地址,从lat/lon转换而来) 。。。使用以下查询 List users=getDbHelper().getDao(User.class) .queryBuilder() .where() .isNotNull(User.Column.ADDRESS) .query(); 。。。将引发此异常: java.sql.SQLException: Field 'address' is of data type com.j256.ormlite.field.types.

(Address类表示人类可读的地址,从lat/lon转换而来)

。。。使用以下查询

List users=getDbHelper().getDao(User.class)
.queryBuilder()
.where()
.isNotNull(User.Column.ADDRESS)
.query();
。。。将引发此异常:

java.sql.SQLException: Field 'address' is of data type com.j256.ormlite.field.types.SerializableType@42ac7650 which can not be compared
        at com.j256.ormlite.stmt.query.BaseComparison.<init>(BaseComparison.java:27)
        at com.j256.ormlite.stmt.query.IsNotNull.<init>(IsNotNull.java:19)
        at com.j256.ormlite.stmt.Where.isNotNull(Where.java:315)
        ...
显然,
SerializableType.isCompable()
返回
false

@覆盖
公共布尔值是可比较的(){
返回false;
}
因此,我很清楚为什么会抛出异常。但是为什么不能执行
Where.isNull()
Where.isNotNull()
?这是SQLite限制还是ORMLite的作者做出了这个决定?

不确定“为什么”,但我认为“如何”是使用
ForeignCollectionField
而不是
DatabaseField