Collections in Hibernate and Adding Keys Example

<div dir&equals;"ltr" style&equals;"text-align&colon; justify&semi;">&NewLine;<div dir&equals;"ltr" style&equals;"text-align&colon; justify&semi;">&NewLine;<div dir&equals;"ltr" style&equals;"text-align&colon; justify&semi;">&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">In previous tutorial of Collections in Hibernate and Adding Keys Example we wrote the collection of objects of an entity class&comma; we persist in the separate table&comma; here there are following two tables are created in the database&period;<&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;"><&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">1&period; <b>TBL&lowbar;USER&lowbar;DETAILS<&sol;b> for <b>UserDetails <&sol;b>entity type object<&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">2&period; <b>TBL&lowbar;USER&lowbar;DETAILS&lowbar;lisOfAddresses  <&sol;b>for <b>Address <&sol;b>value type object<&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;"><&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">In this chapter we will explore some advanced options about the collection&period;<&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">Now we see first thing is the <b>name of the table<&sol;b>&period;<&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;"><&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;"><b>TBL&lowbar;USER&lowbar;DETAILS&lowbar;lisOfAddresses <&sol;b>is name for the collection table it is not very user friendly name&period;<&sol;div>&NewLine;<p>To overcome this problem we will use annotation <b style&equals;"color&colon; orange&semi;">&commat;JoinTable&period;<&sol;b><br &sol;>&NewLine;<b style&equals;"color&colon; orange&semi;"> &commat;JoinTable&colon;<&sol;b><br &sol;>&NewLine;<b style&equals;"color&colon; orange&semi;"> <&sol;b><b>Target&colon;<&sol;b><br &sol;>&NewLine;Fields &lpar;including property get methods&rpar;<&sol;p>&NewLine;<p>Used in the mapping of associations&period; It is specified on the owning side of an association&period;<br &sol;>&NewLine;A join table is typically used in the mapping of many-to-many and unidirectional one-to-many associations&period; It may also be used to map bidirectional many-to-one&sol;one-to-many associations&comma; unidirectional many-to-one relationships&comma; and one-to-one associations &lpar;both bidirectional and unidirectional&rpar;&period;<&sol;p>&NewLine;<p>When a join table is used in mapping a relationship with an embeddable class on the owning side of the relationship&comma; the containing entity rather than the embeddable class is considered the owner of the relationship&period;<&sol;p>&NewLine;<p>If the <b style&equals;"color&colon; orange&semi;">JoinTable <&sol;b>annotation is missing&comma; the default values of the annotation elements apply&period; The name of the join table is assumed to be the table names of the associated primary tables concatenated together &lpar;owning side first&rpar; using an underscore&period;<&sol;p>&NewLine;<div style&equals;"background-color&colon; &num;ff99cc&semi; border-width&colon; thin&semi; border&colon; solid&semi;"><b style&equals;"color&colon; &num;274e13&semi;">&commat;Entity<br &sol;>&NewLine;&commat;Table &lpar;name&equals;&&num;8221&semi;USERS&lowbar;DETAILS&&num;8221&semi;&rpar;<&sol;b><br &sol;>&NewLine;public class UserDetails<br &sol;>&NewLine;&lbrace;<br &sol;>&NewLine;<b style&equals;"color&colon; &num;274e13&semi;"> &commat;Id<br &sol;>&NewLine;&commat;Column&lpar;name&equals;&&num;8221&semi;USER&lowbar;ID&&num;8221&semi;&rpar;<br &sol;>&NewLine;&commat;GeneratedValue&lpar;strategy&equals;GenerationType&period;AUTO&rpar;<&sol;b><br &sol;>&NewLine;private int    userId&semi;<br &sol;>&NewLine;<b style&equals;"color&colon; &num;274e13&semi;"><br &sol;>&NewLine;&commat;Column&lpar;name&equals;&&num;8221&semi;USER&lowbar;NAME&&num;8221&semi;&rpar; <&sol;b><br &sol;>&NewLine;private String userName&semi;<b style&equals;"color&colon; &num;274e13&semi;">&commat;ElementCollection<br &sol;>&NewLine;&commat;JoinTable&lpar;name&equals;&&num;8221&semi;USER&lowbar;ADDRESS&&num;8221&semi;&rpar;<&sol;b>&sol;&sol;name of the table is changed to USER&lowbar;ADDRESS<br &sol;>&NewLine;private Collection&lt&semi;Address&gt&semi; lisOfAddresses &equals; new ArrayList&lt&semi;Address&gt&semi;&lpar;&rpar;&semi;<br &sol;>&NewLine;&rcub;<&sol;p>&NewLine;<&sol;div>&NewLine;<&sol;div>&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<div id&equals;"ads-id" align&equals;"center"><&sol;div>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; text-align&colon; center&semi;"><img class&equals;"aligncenter" src&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;wp-content&sol;uploads&sol;2016&sol;12&sol;address&period;jpg" width&equals;"640" height&equals;"70" border&equals;"0" &sol;><&sol;div>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; text-align&colon; center&semi;"><&sol;div>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; text-align&colon; left&semi;">After running the above code the following output string show the updated table name of the collection table&period;<&sol;div>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; text-align&colon; left&semi;"><&sol;div>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; text-align&colon; left&semi;">Now we see that the name of the column of this table which have the foreign key user id is the <b>USER&lowbar;DETAILS&lowbar;USER&lowbar;ID <&sol;b>is not also very user friendly&comma; for this look to the following updated code of the <b>UserDetails<&sol;b> entity class&period; Here we used annotation <b>&commat;JoinColumn<&sol;b>&period;<&sol;div>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; text-align&colon; left&semi;"><b>&commat;JoinColumn<&sol;b>&colon;<&sol;div>&NewLine;<p><b>Target&colon;<&sol;b><br &sol;>&NewLine;Fields &lpar;including property get methods&rpar;Specifies a column for joining an entity association or element collection&period; If the <b>JoinColumn <&sol;b>annotation itself is defaulted&comma; a single join column is assumed and the default values apply&period;<&sol;p>&NewLine;<p><b style&equals;"color&colon; orange&semi;">&commat;JoinColumns<&sol;b>&colon;<br &sol;>&NewLine;<b>Target&colon;<&sol;b><br &sol;>&NewLine;Fields &lpar;including property get methods&rpar;Defines mapping for composite foreign keys&period; This annotation groups <b>JoinColumn <&sol;b>annotations for the same relationship&period; When the <b>JoinColumns <&sol;b>annotation is used&comma; both the name and the referencedColumnName elements must be specified in each such JoinColumn annotation&period;<&sol;p>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; text-align&colon; left&semi;"><&sol;div>&NewLine;<div style&equals;"background-color&colon; &num;ff99cc&semi; border-width&colon; thin&semi; border&colon; solid&semi;"><b style&equals;"color&colon; &num;274e13&semi;">&commat;Entity<br &sol;>&NewLine;&commat;Table &lpar;name&equals;&&num;8221&semi;USERS&lowbar;DETAILS&&num;8221&semi;&rpar;<&sol;b><br &sol;>&NewLine;public class UserDetails<br &sol;>&NewLine;&lbrace;<br &sol;>&NewLine;<b style&equals;"color&colon; &num;274e13&semi;"> &commat;Id<br &sol;>&NewLine;&commat;Column&lpar;name&equals;&&num;8221&semi;USER&lowbar;ID&&num;8221&semi;&rpar;<br &sol;>&NewLine;&commat;GeneratedValue&lpar;strategy&equals;GenerationType&period;AUTO&rpar;<&sol;b><br &sol;>&NewLine;private int    userId&semi;<br &sol;>&NewLine;<b style&equals;"color&colon; &num;274e13&semi;"><br &sol;>&NewLine;&commat;Column&lpar;name&equals;&&num;8221&semi;USER&lowbar;NAME&&num;8221&semi;&rpar; <&sol;b><br &sol;>&NewLine;private String userName&semi;<b style&equals;"color&colon; &num;274e13&semi;">&commat;ElementCollection<br &sol;>&NewLine;&commat;JoinTable&lpar;name&equals;&&num;8221&semi;USER&lowbar;ADDRESS&&num;8221&semi;&comma;<br &sol;>&NewLine;joinColumns&equals;&commat;JoinColumn&lpar;name&equals;&&num;8221&semi;USER&lowbar;ID&&num;8221&semi;&rpar;&rpar;<&sol;b><br &sol;>&NewLine;private Collection&lt&semi;Address&gt&semi; lisOfAddresses &equals; new ArrayList&lt&semi;Address&gt&semi;&lpar;&rpar;&semi;<br &sol;>&NewLine;&rcub;<&sol;p>&NewLine;<&sol;div>&NewLine;<p>Look the following snap of the output&period;&period;<&sol;p>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; text-align&colon; center&semi;"><img class&equals;"aligncenter" src&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;wp-content&sol;uploads&sol;2016&sol;12&sol;address1&period;jpg" width&equals;"640" height&equals;"76" border&equals;"0" &sol;><&sol;div>&NewLine;<p>Now we look for how to adding key to the collection table&period;<&sol;p>&NewLine;<p><b>UserDetails&period;java<&sol;b><&sol;p>&NewLine;<div style&equals;"background-color&colon; &num;ff99cc&semi; border-width&colon; thin&semi; border&colon; solid&semi;">&NewLine;<p>package com&period;sdnext&period;hibernate&period;tutorial&period;dto&semi;<&sol;p>&NewLine;<p>import java&period;util&period;ArrayList&semi;<br &sol;>&NewLine;import java&period;util&period;Collection&semi;<&sol;p>&NewLine;<p>import javax&period;persistence&period;Column&semi;<br &sol;>&NewLine;import javax&period;persistence&period;ElementCollection&semi;<br &sol;>&NewLine;import javax&period;persistence&period;Entity&semi;<br &sol;>&NewLine;import javax&period;persistence&period;GeneratedValue&semi;<br &sol;>&NewLine;import javax&period;persistence&period;GenerationType&semi;<br &sol;>&NewLine;import javax&period;persistence&period;Id&semi;<br &sol;>&NewLine;import javax&period;persistence&period;JoinColumn&semi;<br &sol;>&NewLine;import javax&period;persistence&period;JoinTable&semi;<br &sol;>&NewLine;import javax&period;persistence&period;Table&semi;<&sol;p>&NewLine;<p>import org&period;hibernate&period;annotations&period;CollectionId&semi;<br &sol;>&NewLine;import org&period;hibernate&period;annotations&period;GenericGenerator&semi;<br &sol;>&NewLine;import org&period;hibernate&period;annotations&period;Type&semi;<&sol;p>&NewLine;<p><b style&equals;"color&colon; &num;274e13&semi;">&commat;Entity<br &sol;>&NewLine;&commat;Table &lpar;name&equals;&&num;8221&semi;USER&lowbar;DETAIL&&num;8221&semi;&rpar;<&sol;b><br &sol;>&NewLine;public class UserDetails<br &sol;>&NewLine;&lbrace;<br &sol;>&NewLine;<b>&commat;Id<br style&equals;"color&colon; &num;274e13&semi;" &sol;>    &commat;Column&lpar;name&equals;&&num;8221&semi;USER&lowbar;ID&&num;8221&semi;&rpar;<br style&equals;"color&colon; &num;274e13&semi;" &sol;>    &commat;GeneratedValue&lpar;strategy&equals;GenerationType&period;AUTO&rpar;<&sol;b><br &sol;>&NewLine;private int    userId&semi;<&sol;p>&NewLine;<p><b style&equals;"color&colon; &num;274e13&semi;">&commat;Column&lpar;name&equals;&&num;8221&semi;USER&lowbar;NAME&&num;8221&semi;&rpar; <&sol;b><br &sol;>&NewLine;private String userName&semi;<&sol;p>&NewLine;<p><b> &commat;ElementCollection<&sol;b><br &sol;>&NewLine;<b style&equals;"color&colon; blue&semi;">&commat;JoinTable&lpar;name&equals;&&num;8221&semi;USER&lowbar;ADDRESS&&num;8221&semi;&comma;<br &sol;>&NewLine;joinColumns&equals;&commat;JoinColumn&lpar;name&equals;&&num;8221&semi;USER&lowbar;ID&&num;8221&semi;&rpar;&rpar;<br &sol;>&NewLine;&commat;GenericGenerator&lpar;strategy&equals;&&num;8221&semi;hilo&&num;8221&semi;&comma; name &equals; &&num;8220&semi;hilo-gen&&num;8221&semi;&rpar;<br &sol;>&NewLine;&commat;CollectionId&lpar;columns &equals; &lbrace; &commat;Column&lpar;name&equals;&&num;8221&semi;ADDRESS&lowbar;ID&&num;8221&semi;&rpar; &rcub;&comma; generator &equals; &&num;8220&semi;hilo-gen&&num;8221&semi;&comma; type &equals; &commat;Type&lpar;type&equals;&&num;8221&semi;long&&num;8221&semi;&rpar;&rpar;<&sol;b><br &sol;>&NewLine;private Collection&lt&semi;Address&gt&semi; lisOfAddresses &equals; new ArrayList&lt&semi;Address&gt&semi;&lpar;&rpar;&semi;<&sol;p>&NewLine;<p>public Collection&lt&semi;Address&gt&semi; getLisOfAddresses&lpar;&rpar; &lbrace;<br &sol;>&NewLine;return lisOfAddresses&semi;<br &sol;>&NewLine;&rcub;<br &sol;>&NewLine;public void setLisOfAddresses&lpar;Collection&lt&semi;Address&gt&semi; lisOfAddresses&rpar; &lbrace;<br &sol;>&NewLine;this&period;lisOfAddresses &equals; lisOfAddresses&semi;<br &sol;>&NewLine;&rcub;<br &sol;>&NewLine;public int getUserId&lpar;&rpar; &lbrace;<br &sol;>&NewLine;return userId&semi;<br &sol;>&NewLine;&rcub;<br &sol;>&NewLine;public void setUserId&lpar;int userId&rpar; &lbrace;<br &sol;>&NewLine;this&period;userId &equals; userId&semi;<br &sol;>&NewLine;&rcub;<br &sol;>&NewLine;public String getUserName&lpar;&rpar; &lbrace;<br &sol;>&NewLine;return userName&semi;<br &sol;>&NewLine;&rcub;<br &sol;>&NewLine;public void setUserName&lpar;String userName&rpar; &lbrace;<br &sol;>&NewLine;this&period;userName &equals; userName&semi;<br &sol;>&NewLine;&rcub;<br &sol;>&NewLine;public String toString&lpar;&rpar;<br &sol;>&NewLine;&lbrace;<br &sol;>&NewLine;return &&num;8220&semi;&lbrack;User Name&colon; &&num;8220&semi;&plus;userName&plus;&&num;8221&semi;n Office Address&colon; &&num;8220&semi;&plus;lisOfAddresses&plus;&&num;8221&semi;&rsqb;&&num;8221&semi;&semi;<br &sol;>&NewLine;&rcub;<br &sol;>&NewLine;&rcub;<&sol;p>&NewLine;<&sol;div>&NewLine;<p><b>Address&period;java <&sol;b>and<b> hibernate&period;cfg&period;xml <&sol;b>is the same as previous chapter<b>&period;<&sol;b><br &sol;>&NewLine;<b><br &sol;>&NewLine;<&sol;b><br &sol;>&NewLine;<b>HibernateTestDemo&period;java<&sol;b><&sol;p>&NewLine;<div style&equals;"background-color&colon; &num;ff99cc&semi; border-width&colon; thin&semi; border&colon; solid&semi;">&NewLine;<p>package com&period;sdnext&period;hibernate&period;tutorial&semi;<&sol;p>&NewLine;<p>import org&period;hibernate&period;Session&semi;<br &sol;>&NewLine;import org&period;hibernate&period;SessionFactory&semi;<br &sol;>&NewLine;import org&period;hibernate&period;cfg&period;AnnotationConfiguration&semi;<&sol;p>&NewLine;<p>import com&period;sdnext&period;hibernate&period;tutorial&period;dto&period;Address&semi;<br &sol;>&NewLine;import com&period;sdnext&period;hibernate&period;tutorial&period;dto&period;UserDetails&semi;<&sol;p>&NewLine;<p>public class HibernateTestDemo &lbrace;<br &sol;>&NewLine;&sol;&ast;&ast;<br &sol;>&NewLine;&ast; &commat;param args<br &sol;>&NewLine;&ast;&sol;<br &sol;>&NewLine;public static void main&lpar;String&lbrack;&rsqb; args&rpar;<br &sol;>&NewLine;&lbrace;<br &sol;>&NewLine;UserDetails user &equals; new UserDetails&lpar;&rpar;&semi;<br &sol;>&NewLine;&sol;&sol;user&period;setUserId&lpar;1&rpar;&semi;<br &sol;>&NewLine;user&period;setUserName&lpar;&&num;8220&semi;Dinesh Rajput&&num;8221&semi;&rpar;&semi;<&sol;p>&NewLine;<p>Address address1 &equals; new Address&lpar;&rpar;&semi;<br &sol;>&NewLine;address1&period;setStreet&lpar;&&num;8220&semi;First Street&&num;8221&semi;&rpar;&semi;<br &sol;>&NewLine;address1&period;setCity&lpar;&&num;8220&semi;First City&&num;8221&semi;&rpar;&semi;<br &sol;>&NewLine;address1&period;setState&lpar;&&num;8220&semi;First State&&num;8221&semi;&rpar;&semi;<br &sol;>&NewLine;address1&period;setPincode&lpar;&&num;8220&semi;First Pin&&num;8221&semi;&rpar;&semi;<&sol;p>&NewLine;<p>Address address2 &equals; new Address&lpar;&rpar;&semi;<br &sol;>&NewLine;address2&period;setStreet&lpar;&&num;8220&semi;Second Street&&num;8221&semi;&rpar;&semi;<br &sol;>&NewLine;address2&period;setCity&lpar;&&num;8220&semi;Second City&&num;8221&semi;&rpar;&semi;<br &sol;>&NewLine;address2&period;setState&lpar;&&num;8220&semi;Second State&&num;8221&semi;&rpar;&semi;<br &sol;>&NewLine;address2&period;setPincode&lpar;&&num;8220&semi;Second Pin&&num;8221&semi;&rpar;&semi;<&sol;p>&NewLine;<p>user&period;getLisOfAddresses&lpar;&rpar;&period;add&lpar;address1&rpar;&semi;<br &sol;>&NewLine;user&period;getLisOfAddresses&lpar;&rpar;&period;add&lpar;address2&rpar;&semi;<&sol;p>&NewLine;<p>SessionFactory sessionFactory &equals; new AnnotationConfiguration&lpar;&rpar;&period;configure&lpar;&rpar;&period;buildSessionFactory&lpar;&rpar;&semi;<br &sol;>&NewLine;Session session &equals; sessionFactory&period;openSession&lpar;&rpar;&semi;<br &sol;>&NewLine;session&period;beginTransaction&lpar;&rpar;&semi;<br &sol;>&NewLine;session&period;save&lpar;user&rpar;&semi;<br &sol;>&NewLine;session&period;getTransaction&lpar;&rpar;&period;commit&lpar;&rpar;&semi;<br &sol;>&NewLine;session&period;close&lpar;&rpar;&semi;<br &sol;>&NewLine;&rcub;<br &sol;>&NewLine;&rcub;<&sol;p>&NewLine;<&sol;div>&NewLine;<div style&equals;"background-color&colon; &num;ff99cc&semi; border&colon; medium solid&semi;"><b>Output&colon;<&sol;b><&sol;div>&NewLine;<div style&equals;"background-color&colon; &num;ff99cc&semi; border&colon; medium solid&semi;">log4j&colon;WARN No appenders could be found for logger &lpar;org&period;hibernate&period;cfg&period;annotations&period;Version&rpar;&period;<br &sol;>&NewLine;log4j&colon;WARN Please initialize the log4j system properly&period;<br &sol;>&NewLine;Hibernate&colon; insert into USER&lowbar;DETAIL &lpar;USER&lowbar;NAME&rpar; values &lpar;&quest;&rpar;<br &sol;>&NewLine;Hibernate&colon; insert into USER&lowbar;ADDRESS &lpar;USER&lowbar;ID&comma; ADDRESS&lowbar;ID&comma; CITY&lowbar;NAME&comma; PIN&lowbar;CODE&comma; STATE&lowbar;NAME&comma; STREET&lowbar;NAME&rpar; values &lpar;&quest;&comma; &quest;&comma; &quest;&comma; &quest;&comma; &quest;&comma; &quest;&rpar;<br &sol;>&NewLine;Hibernate&colon; insert into USER&lowbar;ADDRESS &lpar;USER&lowbar;ID&comma; ADDRESS&lowbar;ID&comma; CITY&lowbar;NAME&comma; PIN&lowbar;CODE&comma; STATE&lowbar;NAME&comma; STREET&lowbar;NAME&rpar; values &lpar;&quest;&comma; &quest;&comma; &quest;&comma; &quest;&comma; &quest;&comma; &quest;&rpar;<&sol;div>&NewLine;<&sol;div>&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; text-align&colon; center&semi;"><img class&equals;"aligncenter" src&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;wp-content&sol;uploads&sol;2016&sol;12&sol;address2&period;jpg" width&equals;"640" height&equals;"83" border&equals;"0" &sol;><&sol;div>&NewLine;<p><b>Tables<&sol;b>&colon;<&sol;p>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; text-align&colon; center&semi;"><img class&equals;"aligncenter" src&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;wp-content&sol;uploads&sol;2016&sol;12&sol;table1&period;jpg" border&equals;"0" &sol;><&sol;div>&NewLine;<p>In <a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;p&sol;proxy-objects-and-eager-and-lazy-fetch&period;html">Next Chapter<&sol;a> we will see about that <a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;p&sol;proxy-objects-and-eager-and-lazy-fetch&period;html">Proxy Object and Fetching strategies<&sol;a>&period;<&sol;p>&NewLine;<p><b> &lt&semi;&lt&semi;<a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;p&sol;saving-collections&period;html">Previous Chapter 14<&sol;a>&lt&semi;&lt&semi;    &gt&semi;&gt&semi;N<a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;p&sol;proxy-objects-and-eager-and-lazy-fetch&period;html">ext Chapter16<&sol;a><&sol;b><&sol;p>&NewLine;<&sol;div>&NewLine;

View Comments