如何在ormlite中保存带有“异物"的对象 [英] how to save an object with 'foreign object' in ormlite
问题描述
这是我的数据库:
创建表其他(id 整数主键自增不为空,文本文本);CREATE TABLE tabela(campoid INTEGER 主键自动增量不为空,camponome 文本不为空,chave int,外键(chave)引用其他(id));
这是我的课程:
@DatabaseTable(tableName = "tabela")公共类豆{@DatabaseField(columnName = "campoid",generatedId = true)私有整数_id;@DatabaseField(columnName = "camponome")私人字符串名称;@DatabaseField(foreign = true, columnName = "chave", canBeNull = false)私人部分chave;}
和其他类映射
@DatabaseTable(tableName = "other")公共课部分{@DatabaseField(generatedId = true, columnName = "id")私有整数 ID;@DatabaseField(columnName = "texto")私人字符串文本;}
但是当我保存一个 Bean 对象时,对象部分"也不会保存:(
Helper helper = OpenHelperManager.getHelper(this, Helper.class);Dao<Bean, Integer>dao = helper.getDao(Bean.class);Bean firstBean = new Bean();firstBean.setNome("首先被持久化");部分部分=新部分();part.setTexto("任何文本");firstBean.setChave(part);dao.create(firstBean);
在我的日志中:
07-13 00:25:26.602: D/BaseMappedStatement(3796): 用语句插入数据 'INSERT INTO tabela
(camponome
,chave代码> ) VALUES (?,?)' 和 2 个参数,更改了 1 行
有什么想法吗?
但是当我保存一个 Bean 对象时,对象部分"也不会保存:(
没错.ORMLite 在您创建对象时默认不会持久化子对象.您可以打开 foreignAutoCreate = true
标志,这将为您执行此操作.请参阅 javadocs for foreignAutoCreate
.
您的 chave
字段应定义为:
@DatabaseField(foreign = true, columnName = "chave", canBeNull = false,外国自动创建 = 真)私人部分chave;
如果您想手动完成,您应该:
partDao.create(firstBean.chave);beanDao.create(firstBean);
您首先在数据库中创建Part
,因为您需要来自Part
的ID,该ID 将保存到您的bean 中.>
This is my database:
CREATE TABLE other (
id integer primary key autoincrement not null,
texto text
);
CREATE TABLE tabela (campoid INTEGER primary key autoincrement not null,
camponome text not null, chave int,
foreign key (chave) references other(id));
and this is my classes:
@DatabaseTable(tableName = "tabela")
public class Bean {
@DatabaseField(columnName = "campoid", generatedId = true)
private int _id;
@DatabaseField(columnName = "camponome")
private String nome;
@DatabaseField(foreign = true, columnName = "chave", canBeNull = false)
private Part chave;
}
and other classe mapped
@DatabaseTable(tableName = "other")
public class Part {
@DatabaseField(generatedId = true, columnName = "id")
private Integer id;
@DatabaseField(columnName = "texto")
private String texto;
}
but when i save an Bean object, the Object 'part' does not save too :(
Helper helper = OpenHelperManager.getHelper(this, Helper.class);
Dao<Bean, Integer> dao = helper.getDao(Bean.class);
Bean firstBean = new Bean();
firstBean.setNome("first be persisted");
Part part = new Part();
part.setTexto("ANY TEXT");
firstBean.setChave(part);
dao.create(firstBean);
in my log:
07-13 00:25:26.602: D/BaseMappedStatement(3796): insert data with statement 'INSERT INTO tabela
(camponome
,chave
) VALUES (?,?)' and 2 args, changed 1 rows
any idea?
but when i save an Bean object, the Object 'part' does not save too :(
Right. ORMLite does not by default persist sub-objects when you create an object. You can turn on the foreignAutoCreate = true
flag which will do that for you however. See the javadocs for foreignAutoCreate
.
Your chave
field should be defined then as:
@DatabaseField(foreign = true, columnName = "chave", canBeNull = false,
foreignAutoCreate = true)
private Part chave;
If you want to do it by hand, you should:
partDao.create(firstBean.chave);
beanDao.create(firstBean);
You create the Part
in the database first because you need the ID from the Part
which will be saved into your bean.
这篇关于如何在ormlite中保存带有“异物"的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!