Android 将复杂对象及其子实体保存到Lite
我在一个项目中使用ORMLite,我决定使用该工具使Web服务的持久化部分只需一次,就可以在Android上重用它 但是我很痛苦,因为有很多复杂的物体,有多个外来的收集场和外来的物体,在Persistir temenda的时候,这些数据令人头痛,因为我必须一个接一个地输入他们的孩子,我想ORM让生活变得更轻松(你必须坚持目标和父亲,其余的都是在幕后完成的) 好吧,现在放弃lite ORM已经太晚了,我想知道是否有办法实现上面提到的sitei 我找到了一段代码 试图实现,但似乎不起作用,只是一直保存父对象 遵循我尝试使用的函数,但不知道导入是否正确,因为我在上面的链接中找到的代码没有此数据Android 将复杂对象及其子实体保存到Lite,android,database,sqlite,ormlite,foreign-collection,Android,Database,Sqlite,Ormlite,Foreign Collection,我在一个项目中使用ORMLite,我决定使用该工具使Web服务的持久化部分只需一次,就可以在Android上重用它 但是我很痛苦,因为有很多复杂的物体,有多个外来的收集场和外来的物体,在Persistir temenda的时候,这些数据令人头痛,因为我必须一个接一个地输入他们的孩子,我想ORM让生活变得更轻松(你必须坚持目标和父亲,其余的都是在幕后完成的) 好吧,现在放弃lite ORM已经太晚了,我想知道是否有办法实现上面提到的sitei 我找到了一段代码 试图实现,但似乎不起作用,只是一
public int create(Object entity, Context context) throws IllegalArgumentException, IllegalAccessException, SQLException, SQLException {
try{
if (entity!=null){
// Class type of entity used for reflection
Class clazz = entity.getClass();
// Search declared fields and save child entities before saving parent.
for(Field field : clazz.getDeclaredFields()) {
field.setAccessible(true);
// Inspect annotations
Annotation[] annotations = field.getDeclaredAnnotations();
try{
for(Annotation annotation : annotations) {
// Only consider fields with the DatabaseField annotation
if(annotation instanceof DatabaseField) {
// Check for foreign attribute
DatabaseField databaseField = (DatabaseField)annotation;
if(databaseField.foreign()) {
// Check for instance of Entity
Object object = field.get(entity);
Dao gDao = getDatabase(context).getDao(object.getClass());
gDao.create(object);
}
}else if (annotation instanceof ForeignCollectionField){
Object object = field.get(entity);
for(Object obj : new ArrayList<Object>((Collection<?>)object)){
Class c = obj.getClass();
Dao gDao = getDatabase(context).getDao(obj.getClass());
gDao.create(obj);
}
}
}
}catch (NullPointerException e){
e.printStackTrace();
}
}
// Retrieve the common DAO for the entity class
Dao dao = getDatabase(context).getDao(entity.getClass());
// Persist the entity to the database
return dao.create(entity);
}else
return 0;
}finally {
if (database != null) {
OpenHelperManager.releaseHelper();
database = null;
}
}
}
public int create(对象实体、上下文上下文)抛出IllegalArgumentException、IllegalAccessException、SQLException、SQLException{
试一试{
如果(实体!=null){
//用于反射的实体的类类型
Class clazz=entity.getClass();
//在保存父实体之前,搜索声明的字段并保存子实体。
for(字段:clazz.getDeclaredFields()){
字段。setAccessible(true);
//检查注释
Annotation[]annotations=field.getDeclaredAnnotations();
试一试{
用于(注释:注释){
/只考虑数据库字段注释的字段
if(数据库字段的注释实例){
//检查外部属性
DatabaseField DatabaseField=(DatabaseField)注释;
if(databaseField.foreign()){
//检查实体的实例
Object=field.get(实体);
Dao gDao=getDatabase(context.getDao(object.getClass());
创建(对象);
}
}else if(ForeignCollectionField的注释实例){
Object=field.get(实体);
对于(对象对象:新ArrayList((集合)对象)){
c类=obj.getClass();
Dao gDao=getDatabase(context.getDao(obj.getClass());
gDao.create(obj);
}
}
}
}捕获(NullPointerException e){
e、 printStackTrace();
}
}
//检索实体类的公共DAO
Dao=getDatabase(context.getDao(entity.getClass());
//将实体持久化到数据库
返回dao.create(实体);
}否则
返回0;
}最后{
if(数据库!=null){
OpenHelperManager.releaseHelper();
数据库=null;
}
}
}
利用相同的帖子,还需要一个colução来删除cascade,想象一下我有以下表格的情况:
公司>类别>人员>联系人>电话和电子邮件
删除,现在我按照文档中的描述执行:
public int deleteCascade(Prefeitura prefeitura, Context context){
try{
Dao<Prefeitura, Integer> dao = getDatabase(context).getDao(Prefeitura.class);
DeleteBuilder db = dao.deleteBuilder();
db.where().eq("prefeitura_id", prefeitura.getId());
dao.delete(db.prepare());
// then call the super to delete the city
return dao.delete(prefeitura);
}catch (SQLException e){
e.printStackTrace();
}
return 0;
}
public int deleteCascade(prefetura prefetura,Context-Context){
试一试{
Dao=getDatabase(context).getDao(prefetura.class);
DeleteBuilder db=dao.DeleteBuilder();
db.where().eq(“prefetura_id”,prefetura.getId());
dao.delete(db.prepare());
//然后调用super删除该城市
返回dao.delete(prefetura);
}捕获(SQLE异常){
e、 printStackTrace();
}
返回0;
}
但是那些与公司没有直接联系的对象仍然在数据库中,我该怎么办
但是没有黑客,我想要一个干净的代码
我知道ORM Lite确实是Lite,但是保存孩子的创建和删除级联对于任何ORM来说都是必不可少的,希望在下一个版本中实现它,遗憾的是没有这些功能,对于简单的项目来说是非常好的,但是在复杂的项目中,因为有很多头痛的事情,我感到很不舒服
欢迎任何帮助 抱歉,我现在没有正确解决这个问题的周期。也许把它贴在android邮件列表上?好的,它已经发布了,但是你知道如何解决删除问题吗?对父对象及其子对象的清晰感觉形成。。。