将<string>列为@ForeignCollectionField ormlite </string>

时间:2013-12-03 11:13:33

标签: android ormlite

我的模型类

List<String> _photo_array;

因为我可以在String Class上添加注释,是否可以使用ormLite来保存它?

2 个答案:

答案 0 :(得分:8)

  

因为我可以在String Class上进行anotation是否可以使用ormLite来保持它?

您将不得不创建一个包裹String的实体。类似的东西:

 @DatabaseTable
 public class Photo {
     @DatabaseField(generatedId = true)
     private int id;
     @DatabaseField
     private String photo;
     @DatabaseField(foreign = true)
     private Model model;
 }

然后你的模特类会有ForeignCollection张这些照片。

 @DatabaseTable
 public class Model {
     @DatabaseField(generatedId = true)
     private int id;
     @ForeignCollectionField()
     private ForeignCollection<Photo> photos;
 }

请参阅foreign collection example

答案 1 :(得分:0)

解决此问题的一种方法是使用一对多关系。

要保持一对多关系,您可以使用ForeignCollection。 Check the docu.

据我所知,ORMLite不支持其他类型的集合。

另一点是您需要在引用的Object中进行反向引用。 要将字段标记为反向引用,请使用注释@DatabaseField(foreign = true,...)

对于场景A(1) - &gt; B(n)的

class A {

   @DatabaseField(generatedId = true, columnName = BaseColumns._ID)
   public int _id;

   @ForeignCollectionField(eager = true)
   public ForeignCollection<B> _photo_array;

}

class B {
   @DatabaseField(generatedId = true, columnName = BaseColumns._ID)
   public int _id;

   @DatabaseField(foreign = true, canBeNull = false, 
         foreignAutoRefresh = true, foreignAutoCreate = true)
   public A a;
}

在此方案中,参考B以一对多的方式进行。如果将加载a,则还将加载所有相关B(因为eager = true)

要保存此结构,您可以使用这种方式(我希望您已经创建了ADao和BDao类):

        final A a = ...;
        final ADao aDAO = ...;

        aDAO.createOrUpdate(a);

        final ArrayList<B> children = ...;
        final BDao bDAO = ...;
        for (final B b: children ) {
            bDAO.create(season);
        }

将存储包含依赖关系的A和B.如果您现在尝试从db获取A,您还将获得与A实例相关的所有B。