Hello.
I have 3 tables, T_Ficha, T_Ficha_Herramientas and T_Herramientas. The relation between T_Ficha y T_Herramientas is many-to-many.
When I try to obtain all the datas from T_Ficha, I get only all the registers from this table, but the HashSet that connects with T_Herramientas is empty.
I tried to debug my program and I realized that if I check all the registers obtained with the debugger (while it is debugging) then it loads the registers that I check in the debugger.
Example: If I get a List with 10 rows, I check the field getTHerramientas from the datas 2 and 5 and then when I print my List I can see the T_Herramientas from the 2 and 5 rows.
I am using spring with Hibernate.
Here are my files:
TFicha class:
Code:
public class TFicha extends LightEntity implements IsSerializable, BeanModelTag {
private static final long serialVersionUID = 1L;
private Integer idFicha;
@NotNull
private TSituacionPublicacion TSituacionPublicacion;
@NotNull
//TODO: Sacar a texto
@Size(message = "La longitud del nombre no puede superar 75 caracteres", max = 75)
private String nomFicha;
//TODO: Sacar a texto
@Size(message = "La longitud de la descripción no puede superar 250 caracteres", max = 250)
private String descFicha;
@NotNull
private Integer mailNormal;
@NotNull
private Integer mailYamer;
@NotNull
private Integer nav;
@NotNull
private Integer fechas;
@NotNull
private Integer acu;
//TODO: Sacar a texto
@Size(message = "La longitud del titulo de la ficha no puede superar 50 caracteres", max = 50)
private String tituloFicha;
private String textoAyuda;
@NotNull
private String usuModif;
@NotNull
private Date FModif;
private Set<TFichaNivelAcceso> TFichaNivelAccesos = new HashSet<TFichaNivelAcceso>(0);
private Set<TMenu> TMenus = new HashSet<TMenu>(0);
private Set<TFichaInforme> TFichaInformes = new HashSet<TFichaInforme>(0);
private Set<THerramientas> THerramientases = new HashSet<THerramientas>(0);
public TFicha() {
}
public TFicha(Integer idFicha,
TSituacionPublicacion TSituacionPublicacion, String nomFicha,
Integer mailNormal, Integer mailYamer, Integer nav,
Integer fechas, Integer acu, String usuModif, Date FModif) {
this.idFicha = idFicha;
this.TSituacionPublicacion = TSituacionPublicacion;
this.nomFicha = nomFicha;
this.mailNormal = mailNormal;
this.mailYamer = mailYamer;
this.nav = nav;
this.fechas = fechas;
this.acu = acu;
this.usuModif = usuModif;
this.FModif = FModif;
}
public TFicha(Integer idFicha,
TSituacionPublicacion TSituacionPublicacion, String nomFicha,
String descFicha, Integer mailNormal, Integer mailYamer,
Integer nav, Integer fechas, Integer acu,
String tituloFicha, String usuModif, Date FModif,
String textoAyuda, Set<TFichaNivelAcceso> TFichaNivelAccesos,
Set<TMenu> TMenus, Set<TFichaInforme> TFichaInformes,
Set<THerramientas> THerramientases) {
this.idFicha = idFicha;
this.TSituacionPublicacion = TSituacionPublicacion;
this.nomFicha = nomFicha;
this.descFicha = descFicha;
this.mailNormal = mailNormal;
this.mailYamer = mailYamer;
this.nav = nav;
this.fechas = fechas;
this.acu = acu;
this.tituloFicha = tituloFicha;
this.usuModif = usuModif;
this.FModif = FModif;
this.textoAyuda = textoAyuda;
this.TFichaNivelAccesos = TFichaNivelAccesos;
this.TMenus = TMenus;
this.TFichaInformes = TFichaInformes;
this.THerramientases = THerramientases;
}
public Integer getIdFicha() {
return this.idFicha;
}
public void setIdFicha(Integer idFicha) {
this.idFicha = idFicha;
}
public TSituacionPublicacion getTSituacionPublicacion() {
return this.TSituacionPublicacion;
}
public void setTSituacionPublicacion(
TSituacionPublicacion TSituacionPublicacion) {
this.TSituacionPublicacion = TSituacionPublicacion;
}
public String getNomFicha() {
return this.nomFicha;
}
public void setNomFicha(String nomFicha) {
this.nomFicha = nomFicha;
}
public String getDescFicha() {
return this.descFicha;
}
public void setDescFicha(String descFicha) {
this.descFicha = descFicha;
}
public Integer getMailNormal() {
return this.mailNormal;
}
public void setMailNormal(Integer mailNormal) {
this.mailNormal = mailNormal;
}
public Integer getMailYamer() {
return this.mailYamer;
}
public void setMailYamer(Integer mailYamer) {
this.mailYamer = mailYamer;
}
public Integer getNav() {
return this.nav;
}
public void setNav(Integer nav) {
this.nav = nav;
}
public Integer getFechas() {
return this.fechas;
}
public void setFechas(Integer fechas) {
this.fechas = fechas;
}
public Integer getAcu() {
return this.acu;
}
public void setAcu(Integer acu) {
this.acu = acu;
}
public String getTituloFicha() {
return this.tituloFicha;
}
public void setTituloFicha(String tituloFicha) {
this.tituloFicha = tituloFicha;
}
public String getUsuModif() {
return this.usuModif;
}
public void setUsuModif(String usuModif) {
this.usuModif = usuModif;
}
public Date getFModif() {
return this.FModif;
}
public void setFModif(Date FModif) {
this.FModif = FModif;
}
public String getTextoAyuda() {
return this.textoAyuda;
}
public void setTextoAyuda(String textoAyuda) {
this.textoAyuda = textoAyuda;
}
public Set<TFichaNivelAcceso> getTFichaNivelAccesos() {
return this.TFichaNivelAccesos;
}
public void setTFichaNivelAccesos(Set<TFichaNivelAcceso> TFichaNivelAccesos) {
this.TFichaNivelAccesos = TFichaNivelAccesos;
}
public Set<TMenu> getTMenus() {
return this.TMenus;
}
public void setTMenus(Set<TMenu> TMenus) {
this.TMenus = TMenus;
}
public Set<TFichaInforme> getTFichaInformes() {
return this.TFichaInformes;
}
public void setTFichaInformes(Set<TFichaInforme> TFichaInformes) {
this.TFichaInformes = TFichaInformes;
}
public Set<THerramientas> getTHerramientases() {
return this.THerramientases;
}
public void setTHerramientases(Set<THerramientas> THerramientases) {
this.THerramientases = THerramientases;
}
THerramientas class:
Code:
public class THerramientas extends LightEntity implements IsSerializable, BeanModelTag {
private static final long serialVersionUID = 1L;
private Integer idHerramienta;
private TSituacionPublicacion TSituacionPublicacion;
@NotNull
//TODO: Sacar a texto
@Size(message = "La longitud del nombre de la herramienta no puede superar 50 caracteres", max = 50)
private String nombreHerram;
@NotNull
//TODO: Sacar a texto
@Size(message = "La longitud del texto de la ventana emergente no puede superar 50 caracteres", max = 50)
private String tooltip;
@NotNull
private Integer ordenPosicion;
//TODO: Sacar a texto
@Size(message = "La longitud de la descripción no puede superar 250 caracteres", max = 250)
private String descripcion;
@NotNull
//TODO: Sacar a texto
@Size(message = "La longitud del nombre del controlador no puede superar 75 caracteres", max = 75)
private String nombreControlador;
@NotNull
//TODO: Sacar a texto
@Size(message = "La longitud del nombre de la clase de estilos no puede superar 50 caracteres", max = 50)
private String cssIcono;
@NotNull
//TODO: Sacar a texto
@Size(message = "La longitud del nombre del usuario modificador no puede superar 20 caracteres", max = 20)
private String usuModif;
@NotNull
private Date FModif;
private String claseJava;
private Set<TInformes> TInformeses = new HashSet<TInformes>(0);
private Set<TFicha> TFichas = new HashSet<TFicha>(0);
public THerramientas() {
}
public THerramientas(Integer idHerramienta,
TSituacionPublicacion TSituacionPublicacion, String nombreHerram,
String tooltip, Integer ordenPosicion, String nombreControlador,
String cssIcono, String usuModif, Date FModif) {
this.idHerramienta = idHerramienta;
this.TSituacionPublicacion = TSituacionPublicacion;
this.nombreHerram = nombreHerram;
this.tooltip = tooltip;
this.ordenPosicion = ordenPosicion;
this.nombreControlador = nombreControlador;
this.cssIcono = cssIcono;
this.usuModif = usuModif;
this.FModif = FModif;
}
public THerramientas(Integer idHerramienta,
TSituacionPublicacion TSituacionPublicacion, String nombreHerram,
String tooltip, Integer ordenPosicion, String descripcion,
String nombreControlador, String cssIcono, String usuModif,
Date FModif, String claseJava, Set<TInformes> TInformeses,
Set<TFicha> TFichas) {
this.idHerramienta = idHerramienta;
this.TSituacionPublicacion = TSituacionPublicacion;
this.nombreHerram = nombreHerram;
this.tooltip = tooltip;
this.ordenPosicion = ordenPosicion;
this.descripcion = descripcion;
this.nombreControlador = nombreControlador;
this.cssIcono = cssIcono;
this.usuModif = usuModif;
this.FModif = FModif;
this.claseJava = claseJava;
this.TInformeses = TInformeses;
this.TFichas = TFichas;
}
public Integer getIdHerramienta() {
return this.idHerramienta;
}
public void setIdHerramienta(Integer idHerramienta) {
this.idHerramienta = idHerramienta;
}
public TSituacionPublicacion getTSituacionPublicacion() {
return this.TSituacionPublicacion;
}
public void setTSituacionPublicacion(
TSituacionPublicacion TSituacionPublicacion) {
this.TSituacionPublicacion = TSituacionPublicacion;
}
public String getNombreHerram() {
return this.nombreHerram;
}
public void setNombreHerram(String nombreHerram) {
this.nombreHerram = nombreHerram;
}
public String getTooltip() {
return this.tooltip;
}
public void setTooltip(String tooltip) {
this.tooltip = tooltip;
}
public Integer getOrdenPosicion() {
return this.ordenPosicion;
}
public void setOrdenPosicion(Integer ordenPosicion) {
this.ordenPosicion = ordenPosicion;
}
public String getDescripcion() {
return this.descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public String getNombreControlador() {
return this.nombreControlador;
}
public void setNombreControlador(String nombreControlador) {
this.nombreControlador = nombreControlador;
}
public String getCssIcono() {
return this.cssIcono;
}
public void setCssIcono(String cssIcono) {
this.cssIcono = cssIcono;
}
public String getUsuModif() {
return this.usuModif;
}
public void setUsuModif(String usuModif) {
this.usuModif = usuModif;
}
public Date getFModif() {
return this.FModif;
}
public void setFModif(Date FModif) {
this.FModif = FModif;
}
public String getClaseJava() {
return this.claseJava;
}
public void setClaseJava(String claseJava) {
this.claseJava = claseJava;
}
public Set<TInformes> getTInformeses() {
return this.TInformeses;
}
public void setTInformeses(Set<TInformes> TInformeses) {
this.TInformeses = TInformeses;
}
public Set<TFicha> getTFichas() {
return this.TFichas;
}
public void setTFichas(Set<TFicha> TFichas) {
this.TFichas = TFichas;
}
TFicha.hbm.xmlCode:
<hibernate-mapping>
<class name="red.es.reporte.domain.beans.TFicha" table="T_FICHA">
<id name="idFicha" type="integer">
<column name="ID_FICHA" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">T_FICHA_SEC</param>
</generator>
</id>
<many-to-one name="TSituacionPublicacion" class="red.es.reporte.domain.beans.TSituacionPublicacion" fetch="select">
<column name="ID_SITUACION" precision="22" scale="0" not-null="true" />
</many-to-one>
<property name="nomFicha" type="string">
<column name="NOM_FICHA" length="75" not-null="true" unique="true" />
</property>
<property name="descFicha" type="string">
<column name="DESC_FICHA" length="250" />
</property>
<property name="mailNormal" type="integer">
<column name="MAIL_NORMAL" precision="22" scale="0" not-null="true" />
</property>
<property name="mailYamer" type="integer">
<column name="MAIL_YAMER" precision="22" scale="0" not-null="true" />
</property>
<property name="nav" type="integer">
<column name="NAV" precision="22" scale="0" not-null="true" />
</property>
<property name="fechas" type="integer">
<column name="FECHAS" precision="22" scale="0" not-null="true" />
</property>
<property name="acu" type="integer">
<column name="ACU" precision="22" scale="0" not-null="true" />
</property>
<property name="tituloFicha" type="string">
<column name="TITULO_FICHA" length="50" />
</property>
<property name="usuModif" type="string">
<column name="USU_MODIF" length="20" not-null="true" />
</property>
<property name="FModif" type="date">
<column name="F_MODIF" length="7" not-null="true" />
</property>
<property name="textoAyuda" type="string">
<column name="TEXTO_AYUDA" length="500" />
</property>
<set name="TFichaNivelAccesos" inverse="true" lazy="true" table="T_FICHA_NIVEL_ACCESO" fetch="select">
<key>
<column name="ID_FICHA" precision="22" scale="0" not-null="true" unique="true" />
</key>
<one-to-many class="red.es.reporte.domain.beans.TFichaNivelAcceso" />
</set>
<set name="TMenus" inverse="true" lazy="true" table="T_MENU" fetch="select">
<key>
<column name="ID_FICHA" precision="22" scale="0" not-null="true" />
</key>
<one-to-many class="red.es.reporte.domain.beans.TMenu" />
</set>
<set name="TFichaInformes" inverse="true" lazy="true" table="T_FICHA_INFORME" fetch="select">
<key>
<column name="ID_FICHA" precision="22" scale="0" not-null="true" />
</key>
<one-to-many class="red.es.reporte.domain.beans.TFichaInforme" />
</set>
<set name="THerramientases" inverse="false" lazy="true" table="T_FICHA_HERRAMIENTA" fetch="select">
<key>
<column name="ID_FICHA" precision="22" scale="0" not-null="true" />
</key>
<many-to-many entity-name="red.es.reporte.domain.beans.THerramientas">
<column name="ID_HERRAMIENTA" precision="22" scale="0" not-null="true" />
</many-to-many>
</set>
</class>
</hibernate-mapping>
THerramientas.hbm.xmlCode:
<hibernate-mapping>
<class name="red.es.reporte.domain.beans.THerramientas" table="T_HERRAMIENTAS">
<id name="idHerramienta" type="integer">
<column name="ID_HERRAMIENTA" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">T_HERRAMIENTAS_SEC</param>
</generator>
</id>
<many-to-one name="TSituacionPublicacion" class="red.es.reporte.domain.beans.TSituacionPublicacion" fetch="select">
<column name="ID_SITUACION" precision="22" scale="0" not-null="true" />
</many-to-one>
<property name="nombreHerram" type="string">
<column name="NOMBRE_HERRAM" length="50" not-null="true" unique="true" />
</property>
<property name="tooltip" type="string">
<column name="TOOLTIP" length="50" not-null="true" />
</property>
<property name="ordenPosicion" type="integer">
<column name="ORDEN_POSICION" precision="22" scale="0" not-null="true" unique="true" />
</property>
<property name="descripcion" type="string">
<column name="DESCRIPCION" length="250" />
</property>
<property name="nombreControlador" type="string">
<column name="NOMBRE_CONTROLADOR" length="75" not-null="true" />
</property>
<property name="cssIcono" type="string">
<column name="CSS_ICONO" length="50" not-null="true" />
</property>
<property name="usuModif" type="string">
<column name="USU_MODIF" length="20" not-null="true" />
</property>
<property name="FModif" type="date">
<column name="F_MODIF" length="7" not-null="true" />
</property>
<property name="claseJava" type="string">
<column name="CLASE_JAVA" length="50" />
</property>
<set name="TInformeses" inverse="true" lazy="true" table="T_INFORME_HERRAMIENTA" fetch="select">
<key>
<column name="ID_HERRAMIENTA" precision="22" scale="0" not-null="true" />
</key>
<many-to-many entity-name="red.es.reporte.domain.beans.TInformes">
<column name="ID_INFORME" precision="22" scale="0" not-null="true" />
</many-to-many>
</set>
<set name="TFichas" inverse="true" lazy="true" table="T_FICHA_HERRAMIENTA" fetch="select">
<key>
<column name="ID_HERRAMIENTA" precision="22" scale="0" not-null="true" />
</key>
<many-to-many entity-name="red.es.reporte.domain.beans.TFicha">
<column name="ID_FICHA" precision="22" scale="0" not-null="true" />
</many-to-many>
</set>
</class>
</hibernate-mapping>
And the function from my DAO.
Code:
public List<TFicha> buscaPorEjemplo(TFicha instance) throws RuntimeException {
logger.info("Buscando una instancia de TFicha por medio de un ejemplo");
DetachedCriteria criteria = DetachedCriteria.forClass(TFicha.class);
try {
List<TFicha> results = getHibernateTemplate().findByCriteria(criteria);
logger.info("Búsqueda satisfactoria, se han encontrado: " + results.size() + " resultados");
return results;
} catch (RuntimeException re) {
logger.error("Ha fallado el proceso de búsqueda: ", re);
throw re;
}
}
Why is it happening?, do I have something wrong in my configuration files?
Thank you.