I come from a web development background and haven’t done anything significant in Java in quite some time.
I’m doing a small project, most of which involves some models with relationships and straightforward CRUD operations with those objects.
JPA/EclipseLink seems to suit the problem, but this is the kind of app that has File->Open and File->Save features, i.e. the data will be stored in files by the user, rather than persisting in the database between sessions.
The last time I worked on a project like this, I stored the objects in ArrayList objects, but having worked with MVC frameworks since, that seems a bit primitive. On the other hand, using JPA, opening a file would require loading a whole bunch of objects in the database, just for the convenience of not having to write code to manage the objects.
What’s the typical approach for managing model data with Java SE desktop applications?
JPA was specifically build with databases in mind. This means that typically it operates on a big datastore with objects belonging to many different users.
In a file based scenario, quite often files are not that big and all objects in the file belong to the same user and same document. In that case I’d say for a binary format the old Java serialization still works for temporary files.
For longer term or interchangeable formats XML is better suited. Using
JAXB(included in the standard Java library) you can marshal and demarshal Java objects to XML using an annotation based approach that on the surface resembles JPA. In fact, I’ve worked with model objects that have both JPA and JAXB annotations so they can be stored in a Database as well as in an XML file.If your desktop app however uses files that represents potentially huge datasets for which you need paging and querying, then using JPA might still be the better option. There are various small embedded DBs available for Java, although I don’t know how simple it is to let a data source point to a user selected file. Normally a persistence unit in Java is mapped to a fixed data source and you can’t yet create persistence units on the fly.
Yet another option would be to use
JDO, which is a mapping technology likeJPA, but not an ORM. It’s much more independent of the backend persistence technology that’s being used and indeed maps to files as well.Sorry that this is not a real answer, but more like some things to take into account, but hope it’s helpful in some way.