我正在试图弄清楚如何在GreenDao中为Android建立这种关系。
我们有一个NavigationNode,可以有ManytoMany其他NavigationNodes。
在Rails中,我们使用' has_many:通过'使用NavigationPath连接表:
class NavigationPoint < ActiveRecord::Base
has_many :navigation_paths, dependent: :destroy
has_many :paths, through: :navigation_paths, source: :navigation_point, dependent: :destroy
end
class NavigationPath < ActiveRecord::Base
attr_accessible :navigation_point_id, :connected_point_id
belongs_to :navigation_point, foreign_key: :connected_point_id
end
在iOS中我们只是将它设置为与NavigationNode上的self关系:
Relationship Destination Inverse
-------------------------------------------
paths NavigationNode paths
但我似乎无法为greenDAO找到合适的配置。
任何帮助/提示都将不胜感激,谢谢
我现在实施了一个临时解决方案:
NavigationPath的DAO(联接表):
Entity navigationPath = schema.addEntity("NavigationPath");
navigationPath.setSuperclass(SUPER_CLASS);
navigationPath.setIsJoinTable(true);
navigationPath.addIdProperty();
Property fromNavigationNodeProperty = navigationPath.addLongProperty("NavigationNodeID").getProperty();
Property toNavigationNodeProperty = navigationPath.addLongProperty("toNavigationNodeID").getProperty();
ToMany paths = navigationNode.addToMany(navigationPath, fromNavigationNodeProperty, "navigationPaths");
Index indexNavigationPath = new Index();
indexNavigationPath.addProperty(fromNavigationNodeProperty);
indexNavigationPath.addProperty(toNavigationNodeProperty);
indexNavigationPath.makeUnique();
navigationPath.addIndex(indexNavigationPath);
这里是NavigationPath中的自定义关系方法:
public List<NavigationNode> getPaths(String where) {
if (daoSession == null) {
throw new DaoException("Entity is detached from DAO context");
}
NavigationPathDao pathDao = daoSession.getNavigationPathDao();
QueryBuilder pathsQuery = pathDao.queryBuilder().where(NavigationPathDao.Properties.NavigationNodeID.eq(id));
List<NavigationPath> navigationPaths = pathsQuery.list();
List<NavigationNode> navigationNodesNew = new ArrayList<NavigationNode>();
for (NavigationPath path : navigationPaths) {
Long id = path.getToNavigationNodeID();
NavigationNode node = myDao.load(id);
if (node != null)
navigationNodesNew.add(node);
}
return navigationNodesNew;
}
这是一个非常天真的实现,但现在它正在工作。
但是,再一次,提示很感激。
答案 0 :(得分:0)
多对多关系(n:m)
在数据库中,n:m关系使用连接表建模。加入 table保存具有带有外键的行的条目 相关表格。虽然greenDAO不支持n:m关系 直接到现在,您可以将连接表建模为单独的实体。 在实践中,您经常会有“关系实体” 属性,所以你可能还是想这样做。在以后的版本中, greenDAO可能会直接支持n:m关系。
在没有关系实体的情况下,此时似乎不可能,也许你可以试试。