VOOZH about

URL: https://www.javacodegeeks.com/2012/06/registering-entity-types-with-openjpa.html

⇱ Registering entity types with OpenJPA programmatically - Java Code Geeks


I’ve just started work on an OpenJPA objectstore for Isis. In the normal scheme of things, one would register the entity types within the file. However, Isis is a framework that builds its own metamodel, and can figure out for itself which classes constitute entities. I therefore didn’t want to have to force the developer to repeat themselves, so the puzzle became how to register the entity types programmatically within the Isis code.

It turns out to be pretty simple, if a little ugly. OpenJPA allows implementations of certain key components to be defined programmatically; these are specified in a properties map that is then passed through to . But it also supports a syntax that can be used to initialize those components through setter injection.

In my case the component of interest is the . At one point I thought I’d be writing my own implementation; but it turns out that the standard implementation does what I need, because it allows the types to be injected through its mutator. The list of strings is passed into that property as a ;-delimited list.

So, here’s what I’ve ended up with:

final Map<String, String> props = Maps.newHashMap();

final String typeList = entityTypeList();
props.put("openjpa.MetaDataFactory",
 "org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory(types=" + typeList + ")");

// ... then add in regular properties such as 
// openjpa.ConnectionURL, openjpa.ConnectionDriverName etc...
 
entityManagerFactory = Persistence.createEntityManagerFactory(null, props);

where in my case looks something like:

private String entityTypeList() {
 final StringBuilder buf = new StringBuilder();
 // loop thru Isis' metamodel looking for types that have been annotated using @Entity
 final Collection<ObjectSpecification> allSpecifications = 
 getSpecificationLoader().allSpecifications();
 for(ObjectSpecification objSpec: allSpecifications) {
 if(objSpec.containsFacet(JpaEntityFacet.class)) {
 final String fqcn = objSpec.getFullIdentifier();
 buf.append(fqcn).append(";");
 }
 }
 final String typeList = buf.toString();
 return typeList;
}

Comments welcome, as ever

Reference: Registering entity types with OpenJPA programmatically from our JCG partner Dan Haywood at the Dan Haywood blog blog.

Do you want to know how to develop your skillset to become a Java Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. JPA Mini Book
2. JVM Troubleshooting Guide
3. JUnit Tutorial for Unit Testing
4. Java Annotations Tutorial
5. Java Interview Questions
6. Spring Interview Questions
7. Android UI Design
and many more ....
I agree to the Terms and Privacy Policy

Thank you!

We will contact you soon.

👁 Photo of Dan Haywood
Dan Haywood
June 1st, 2012Last Updated: October 22nd, 2012
0 189 1 minute read
Subscribe

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Back to top button
Close
wpDiscuz