Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Using structures/maps instead of arrays in ORM

DZone's Guide to

Using structures/maps instead of arrays in ORM

· Java Zone ·
Free Resource

Java-based (JDBC) data connectivity to SaaS, NoSQL, and Big Data. Download Now.

By default an ORM relationship is an array. Using a structure (map for non-ColdFusion programmers) is very easy and provides nice options. Lets start with a simple relationship between of users and addresses.
component persistent="true" {
property name="userId" fieldtype="id" generated="always" generator="native";
property name="name" ormtype="string";

property name="address" fieldtype="one-to-many" cfc="address" fkcolumn="userId" inverse="true";
}
Address.cfc
component persistent="true" {
property name="addressId" fieldtype="id" generated="always" generator="native";
property name="type" ormtype="string";
property name="street" ormtype="string";
property name="city" ormtype="string";
property name="state" ormtype="string";

property name="user" fieldtype="many-to-one" cfc="user";
}

A single user object with two addresses would look like this:


Now, if we want to find out if the user has a work address we need to loop through getAddress(). Thats ok but by converting the relationship to a struct its possible to then use structure functions. Here is the relationship in User.cfc defined to return a structure:

property name="address" fieldtype="one-to-many" cfc="address" fkcolumn="userId" inverse="true"
    type="struct" structkeycolumn="type";

A dump of the user object now looks like:


Which means we can use code like this, in particular line 3:

<cfset u = entityLoad("user")>
<cfloop array="#u#" index="user">
    <cfif structKeyExists( user.getAddress(), "work" )>
        <cfdump var="#user.getAddress()["work"]#">
    </cfif>
</cfloop>

For reference here is the Application.cfc to set up Hibernate/ORM:


component
{
this.name="structsDemo";
this.ormEnabled=true;
this.datasource="cfartgallery";
this.ormsettings = { dbcreate="update" };

}

Connect any Java based application to your SaaS data.  Over 100+ Java-based data source connectors.

Topics:

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}