
Originally Posted by
karldmoore
Any chance you can explain more about what you don't understand with this stuff. I don't really follow what you struggling with. As for your example, I think that declarative transactions would be a better idea.
Well....let's image i have this kind of hibernate configuration:
molti.hbm.xml
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Apparecchiatura" table="APPARECCHIO">
<id name="id" type="int" column="APPA_ID" unsaved-value="0">
<generator class="native"/>
</id>
<many-to-one name="organo" column="ORGANO_ID" not-null="true" class="it.eng.Organo" cascade="delete"/>
<property name="descrizione" column="DESCRIZIONE" type="string"/>
</class>
</hibernate-mapping>
Apparecchiatura.java
Code:
import java.io.Serializable;
public class Apparecchiatura extends GenericEntity{
/**
*
*/
private static final long serialVersionUID = -6700481256808933166L;
private int id;
private String descrizione;
private Organo organo;
public String getDescrizione() {
return descrizione;
}
public void setDescrizione(String descrizione) {
this.descrizione = descrizione;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Organo getUnoAmolti() {
return organo;
}
public void setUnoAmolti(Organo organo) {
this.organo = organo;
}
public Serializable getKey() {
return new Integer(getId());
}
public Organo getOrgano() {
return organo;
}
public void setOrgano(Organo organo) {
this.organo = organo;
}
}
uno.hbm.xml
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Organo" table="ORGANO">
<id name="id" type="int" column="ID" unsaved-value="0">
<generator class="native"/>
</id>
<property name="descrizione" column="DESCRIZIONE" type="string"/>
<set name="apps" cascade="all" lazy="true">
<key column="APPA_ID"/>
<one-to-many class="it.eng.Apparecchiatura"/>
</set>
</class>
</hibernate-mapping>
Organo.java
Code:
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class Organo extends GenericEntity {
/**
*
*/
private static final long serialVersionUID = -1692194167515470470L;
private int id;
private String descrizione;
private Set apps = new HashSet();
public String getDescrizione() {
return descrizione;
}
public void setDescrizione(String descrizione) {
this.descrizione = descrizione;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Serializable getKey() {
return new Integer(getId());
}
public Set getApps() {
return apps;
}
public void setApps(Set apps) {
this.apps = apps;
}
public void addApparecchiatura(Apparecchiatura ap){
ap.setOrgano(this);
apps.add(ap);
}
}
Now if i try to search an Organo i can use getHibernateTemplate for doing it; if i need to have all the Apparecchiatura associated to the Organo i have to use the doInHibernate method so i can load Organo and all the Apparecchiatura associated; and untill here it's still all OK.
Now let's image i have to update some Apparecchiatura associated to Organo; i need to do this always in doinHibernate method...but let's image i have two or more transaction i have to do in the current open Hibernate session and let's image i need to be sure about the full commit transaction....how can i do?
Can i use the way i showed before or must i use any other way?