Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EclipseLink/Examples/JPA/Extensibility
The follow steps will help you configure your persistence unit so that it can have a set of mappings that are changeable after your application is deployed.
1. Design a standard JPA Application
2. Decide which Entities will allow flexible mappings, annotate them as such and provide facilities to store the addional data.
@Entity @VirtualAccessMethods public class Customer{ ... @Transient private Map<String, Object> extensions; public <T> T get(String name) { return (T) extentions.get(name); } public Object set(String name, Object value) { return extensions.put(name, value); }
3. When you design your schema, provide enough extra columns in your tables to accomodate the number of flexible mappings you will allow. e.g. The following table has 3 predefined columns and 3 columns designed to accomodate mappings added after design (FLEX_COL1, FLEX_COL2, FLEX_COL3)
- CUSTOMER
- INTEGER ID
- VARCHAR NAME
- VARCHAR FLEX_COL1
- VARCHAR FLEX_COL2
- VARCHAR FLEX_CO31
4. Deploy your application
5. To provide additional mappings, provide an eclipselink-orm.xml file that contains the additional mappings.
<basic name="idNumber" attribute-type="String"> <column name="FLEX_1"/> <access-methods get-method="get" set-method="set"/> </basic>
6. Use persistence unit properties to get your application to use the file:
<property name="eclipselink.metadata-source" value="XML"/> <property name="eclipselink.metadata-source.xml.url" value="foo://bar"/>