I’m pleased to announce that as of this morning, ORMDroid now has some basic support for one-to-many relationships between entities, thanks to Jacob Ferrero and as hinted at in a previous post. Jacob actually put this together a few months ago, the only hold-up has been me getting around to merging the code in, so it’s great that it’s finally done. It’s not in a release yet (later this week is the plan on that) but is available in Git on the master branch.
Jacob explains the changes better than I can, so here’s a quote directly from his original pull request:
Basic usage is like this:
Person.java
class Person extends Entity { public String name; @Column(inverse = "person") public ArrayList<Hobby> hobbies; }Hobby.java
class Hobby extends Entity { public String type; public Person person; }And then you would just use it like normal:
Person person = Entity.query(Person).where(eql("name", "Christ")).execute();
for(Hobby hobby : person.hobbies)
Log.d(TAG, "Hobby found: " + hobby.type);
It’s worth noting that this change does break the API slightly, the most common case being that if you’ve previously used @Column(inverse = true) then you’ll need to migrate to the new form which names the foreign column.
In the unlikely case that you’ve implemented your own type mappings, you’ll also need to make some changes as the public API has changed slightly (there’s a new parameter, precursors, which if you’re not currently using you can safely ignore in your code) and there have been some minor changes under the hood (e.g. in EntityMapping#load) that you’ll need to update your code for.
All in all, some long-overdue positive movement in ORMDroid. We’re definitely moving toward a new release this week, and I promise to be less tardy in the future!