spring - Hibernate annotations-Question on one to many relationship with composite primary key -


first of all, kindly @ design,

i have 2 tables t1(a,b,c,d)- primary key t2(a,e) (a,e) composite primary key foreign key referencing t1(a)

t1 - t2 relationship 1 many.

so created 3 classes

  1. c1 t1 has 5 fields - a,b,c,d, c2set setters & getters

  2. c2 t2 has 2 fields- c1,c3 of type c1, c3 respectively- setters & getters

  3. c3 defining c3 represent composite primary key of t2 has 2 fields (a,e) setters & getters

i using following annotations define hibernate mappings in classes c1,c2,c3 respectively

1.

@entity @table(name = "t1", schema = "dbo", uniqueconstraints = { @uniqueconstraint(columnnames = "a") })  @id @column(name = "a", unique = true, nullable = false)  @transient private set<c2> c2set = new hashset<c2>();  @onetomany(fetch = fetchtype.eager, mappedby = "c1")     public set<c2> getc2set() {         return c2set;     } 

2.

@entity      @table(name="t2", schema = "dbo")   @id public c3 getc3() {         return c3;     }  private c1 c1; @manytoone(fetch = fetchtype.eager)     @joincolumn(name = "a",insertable= false, updatable=false)     public c1 getc1() {         return c1;     } 

3.

@embeddable  @column(name = "a")     public string geta() {         return a;     }  @column(name="e")     public string gete() {         return e;     }   @service public class c1serviceimpl implements c1service {      @autowired     @qualifier("transactionproxy")     private genericdao genericdao;       public genericdao getgenericdao() {         return genericdao;     }      public void setgenericdao(genericdao genericdao) {         this.genericdao = genericdao;     }       @override     public void registerc1() {          c1 c1=new c1();         c1.seta("avalue");                 c1.setb("somevalue");                 c1.setc("somevalue");                 c1.setd("somevalue");          c3 compositekey1 = new c3();         compositekey1.seta("avalue");         compositekey1.sete("e1");                  c3 compositekey2 = new c3();         compositekey1.seta("avalue");         compositekey1.sete("e2");           c2 c2_1=new c2();         c2_1.setc3(compositekey1);                  c2 c2_2=new c2();         c2_2.setc3(compositekey2);             set<c2> eset = new hashset<c2>();         eset.add(c2_1);         eset.add(c2_2);          c1.setroles(eset);----------------------important          genericdao.registeruser(c1);     }             }      @repository @transactional public class hibernatedao implements genericdao {      @autowired     private sessionfactory sessionfactory;      public sessionfactory getsessionfactory() {         return sessionfactory;     }      public void setsessionfactory(sessionfactory sessionfactory) {         this.sessionfactory = sessionfactory;     }      private session currentsession() {         return sessionfactory.getcurrentsession();     }      @override     public void registerc1(c1 c1) {         session session = currentsession();         session.begintransaction();         session.save(c1);----------------------------------------- here feel insertion should happen in both t1 & t2 tables. should should do, should insert t2 in                                                                            same way doing t1          session.gettransaction().commit();      }     }    <bean id="datasource" class="org.apache.commons.dbcp.basicdatasource"         destroy-method="close">         <property name="driverclassname" value="com.microsoft.sqlserver.jdbc.sqlserverdriver" />         <property name="url"             value="xxxxxxxxxxxxxxxxxxxxxxx" />         <property name="username" value="dddddd" />         <property name="password" value="eeeeee" />     </bean>     <bean id="sessionfactory"         class="org.springframework.orm.hibernate3.annotation.annotationsessionfactorybean">         <property name="datasource" ref="datasource" />         <property name="packagestoscan" value="<package in c1,c2,c3,generic dao, hibernatedao live>" />         <property name="annotatedclasses">      <list>        <value>fully qualified name of c1</value>      </list>    </property>          <property name="hibernateproperties">             <props>                 <prop key="hibernate.current_session_context_class">thread</prop>                 <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.jdbctransactionfactory                 </prop>                 <prop key="dialect">org.hibernate.dialect.sqlserverdialect</prop>                 <prop key="hibernate.show_sql">true</prop>             </props>         </property>     </bean>      <bean id="mytxmanager"         class="org.springframework.orm.hibernate3.hibernatetransactionmanager">         <property name="sessionfactory" ref="sessionfactory" />     </bean>     <bean id="transactionproxy"         class="org.springframework.transaction.interceptor.transactionproxyfactorybean">         <property name="proxytargetclass" value="true" />         <property name="transactionmanager">             <ref bean="mytxmanager" />         </property>         <property name="transactionattributes">             <props>                 <prop key="*">propagation_required</prop>             </props>         </property>         <property name="target">             <bean class="fully qualified name of hibernatedao">                 <property name="sessionfactory" ref="sessionfactory" />         </bean>         </property>     </bean> 

i have problem when inserting(saving) data. data t1 getting inserted no insertion happening in t2( think should happen automatically here) ? please tell me doing things wrongly. and, want learn more hibernate annotations. can point me useful online resources.

and, separate form bean entity class? please tell me resources can learn about

hibernate doesn't persist objects referenced relationships default. need configure cascading of relationship make hibernate it:

@onetomany(fetch = fetchtype.eager, mappedby = "c1", cascade = cascadetype.all) public set<c2> getc2set() {     return c2set; }  

see also:


Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -