【发布时间】:2015-07-06 23:28:31
【问题描述】:
我正在尝试在java中使用ORMLite,但遇到了以下问题。
我的代码是这样的:
@DatabaseTable(tableName = "subscriptions")
public class Subscription {
@DatabaseField(id = true, index = true, uniqueCombo=true, foreign = true, foreignColumnName = "gcm_id")
private User user;
@DatabaseField(id = true, index = true, uniqueCombo=true, foreign = true, foreignColumnName = "id")
private Category category;
//other stuff in the class
}
请注意,字段 user 和 category 同时标记为 id 和 foreign。我相信这符合我的数据库:
这些字段分别指向表用户和类别。我认为这对于数据库来说是很正常的,但如果我错了,请纠正我。
上线
subscriptionDao = DaoManager.createDao(connectionSource, Subscription.class);
我收到此错误:
线程“main”中的异常 java.lang.IllegalArgumentException: Id 现场用户也不能是外来对象 com.j256.ormlite.field.FieldType.(FieldType.java:231) 在 com.j256.ormlite.field.FieldType.createFieldType(FieldType.java:937) 在 com.j256.ormlite.table.DatabaseTableConfig.extractFieldTypes(DatabaseTableConfig.java:208) 在 com.j256.ormlite.table.DatabaseTableConfig.fromClass(DatabaseTableConfig.java:146) 在 com.j256.ormlite.table.TableInfo.(TableInfo.java:53) 在 com.j256.ormlite.dao.BaseDaoImpl.initialize(BaseDaoImpl.java:149) 在 com.j256.ormlite.dao.BaseDaoImpl.(BaseDaoImpl.java:126) 在 com.j256.ormlite.dao.BaseDaoImpl.(BaseDaoImpl.java:105) 在 com.j256.ormlite.dao.BaseDaoImpl$4.(BaseDaoImpl.java:895) 在 com.j256.ormlite.dao.BaseDaoImpl.createDao(BaseDaoImpl.java:895) 在 com.j256.ormlite.dao.DaoManager.createDao(DaoManager.java:70)
错误应该是不言自明的,Id 字段用户也不能是外来对象。但是,我在任何地方都找不到任何关于为什么会这样或如何解决它的信息。如果我的数据库设计正确,这对我来说也没有意义。
为了更没意义,如果我替换这些行
@DatabaseField(id = true, index = true, uniqueCombo=true, foreign = true, foreignColumnName = "gcm_id")
private User user;
这些
@DatabaseField(id = true, index = true, uniqueCombo=true)
private User user;
我收到一个预期的“ORMLite 不知道如何存储类”错误,但 我没有收到相同的 Id 字段 _____ 也不能是类别字段的外来对象错误。我只有如果我为我的用户字段设置 id = false,则类别字段会出现此错误。
一个简单的补丁是使用生成的 id 进行表订阅,但就像我说的那样,我正在这样设计我的数据库,因为我被教导最好避免在任何地方生成 id,尤其是在主键该表很明显,易于处理,工作等(即当您没有真正从使用生成的 id 获得任何东西时)。
感谢大家的帮助。
【问题讨论】: