[jboss-jira] [JBoss JIRA] Resolved: (EJBTHREE-479) org.hibernate.HibernateException: CGLIB Enhancement failed

Emmanuel Bernard (JIRA) jira-events at lists.jboss.org
Tue Feb 13 20:35:31 EST 2007


     [ http://jira.jboss.com/jira/browse/EJBTHREE-479?page=all ]

Emmanuel Bernard resolved EJBTHREE-479.
---------------------------------------

    Resolution: Rejected

no user feedback

> org.hibernate.HibernateException: CGLIB Enhancement failed
> ----------------------------------------------------------
>
>                 Key: EJBTHREE-479
>                 URL: http://jira.jboss.com/jira/browse/EJBTHREE-479
>             Project: EJB 3.0
>          Issue Type: Bug
>    Affects Versions: EJB 3.0 RC5 - PFD
>         Environment: Java 5_6, EJB3RC5, JBoss 4.0.4RC1, Ingres3.0.3, PostgreSQL 8.1.3
>            Reporter: Stefan Lindner
>
> Bean A is referenced by Bean B (Lazy)
> Bean B is Referenced By Bean C (Lazy)
> Now query for Bean C fails with 
>     java.lang.Exception: java.lang.Exception: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
>     java.lang.Exception: java.lang.Exception: java.lang.Exception: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
> If I change the @FetchType to eager it works.
> But in Detail.
> --- Start of BeanA (OrganisationBean) -------------------------------------------------------------------------------------------------------------------
> package de.visiomedic.organisationsstruktur;
> import javax.persistence.Inheritance;
> import javax.persistence.InheritanceType;
> import javax.persistence.Entity;
> import javax.persistence.Table;
> import javax.persistence.UniqueConstraint;
> import javax.persistence.Id;
> import javax.persistence.Column;
> import javax.persistence.NamedQuery;
> import javax.persistence.NamedQueries;
> @Entity()
> @Inheritance(strategy=InheritanceType.JOINED)
> @NamedQueries( {
> 		@NamedQuery (
> 				name="OrganisationBean.FindByName",
> 				query="SELECT entity FROM OrganisationBean entity WHERE entity.name = :name" ) ,
> 		@NamedQuery (
> 				name="OrganisationBean.FindAll",
> 				query="SELECT entity FROM OrganisationBean entity" )
> 		}
> )
> @Table(name = "organisation", uniqueConstraints={
> 								@UniqueConstraint(columnNames={"id"}),
> 								@UniqueConstraint(columnNames={"name"})})
> public class OrganisationBean implements java.io.Serializable {
> 	public static final long serialVersionUID = 1L;
> 	public static final String SEQUENCE_NAME = "organisation_sequence";
> 	
> 	public static final String defaultOrganisationForTest = "Messe";
> 	// [[ Constructors ###########################################################
> 	OrganisationBean() {
> 		;
> 	}
> 	OrganisationBean(String id, String name) throws Exception {
> 		this.setId(id);
> 		this.setName(name);
> 	}
> 	// ]] Constructors ###########################################################
> 	// [[ Component Interface ####################################################
> 	// [[ id .....................................................................
> 	private String id;
> 	@Id
> 	@Column(
> 			name="id",
> 			unique=true,
> 			nullable=false,
> 			updatable=false,
> 			length=12,
> 			columnDefinition="varchar(12)"
> 			)
> 	public String getId() {
> 		return id;
> 	}
> 	void setId(String id) {
> 		this.id = id;
> 	}
> 	// ]] id
> 	// [[ name ...................................................................
> 	private String name;
> 	@Column(
> 			name="name",
> 			unique=true,
> 			nullable=false,
> 			updatable=true,
> 			length=100,
> 			columnDefinition="varchar(200)"
> 			)
> 	public String getName() {
> 		return this.name;
> 	}
> 	public void setName(String name) throws Exception {
> 		if (name == null)
> 			throw new Exception("OrganisationBean.setName(null): null value for 'name' not allowed");
> 		this.name = name;
> 	}
> 	// ]] name
> 	// ]] Component interface ####################################################
> 	// [[ Business Interface #####################################################
> 	public String toString() {
> 		return "OrganisationBean: id = " + _toString(this.id) + ", name = " + _toString(this.name);
> 	}
> 	// ]] Business Interface #####################################################
> }
> --- End of BeanA (OrganisationBean) --------------------------------------------------------------------------------------------------------------------
> --- Start of BeanB (SiteBean) -------------------------------------------------------------------------------------------------------------------
> package de.visiomedic.organisationsstruktur;
> import javax.persistence.Column;
> import javax.persistence.Entity;
> import javax.persistence.FetchType;
> import javax.persistence.Id;
> import javax.persistence.JoinColumn;
> import javax.persistence.ManyToOne;
> import javax.persistence.NamedQueries;
> import javax.persistence.NamedQuery;
> import javax.persistence.Table;
> import javax.persistence.UniqueConstraint;
> import de.visiomedic.organisationsstruktur.OrganisationBean;
> @Entity()
> @NamedQueries( {
> 		@NamedQuery (
> 				name="SiteBean.FindAllForOrganisation",
> 				query="SELECT entity FROM SiteBean entity where entity.organisation = :organisation" ),
> 		@NamedQuery (
> 				name="SiteBean.FindByNameForOrganisation",
> 				query="SELECT entity FROM SiteBean entity where entity.name = :name AND entity.organisation = :organisation" )
> 		}
> )
> @Table(name = "site", uniqueConstraints={
> 						@UniqueConstraint(columnNames={"id"}),
> 						@UniqueConstraint(columnNames={"organisation", "name"})})
> public class SiteBean implements java.io.Serializable {
> 	public static final long serialVersionUID = 1L;
> 	public static final String SEQUENCE_NAME = "site_sequence";
> 	public static final String defaultSiteForTest = "Medica";
> 	// [[ Constructors ###########################################################
> 	SiteBean() {
> 		;
> 	}
> 	SiteBean(final String id, final OrganisationBean organisation, final String name) throws Exception {
> 		this.setId(id);
> 		this.setName(name);
> 		this.setOrganisation(organisation);
> 	}
> 	// ]] Constructors ###########################################################
> 	// [[ Component Interface ####################################################
> 	// [[ id .....................................................................
> 	private String id;
> 	@Id
> 	@Column(
> 			name="id",
> 			unique=true,
> 			nullable=false,
> 			updatable=false,
> 			length=12,
> 			columnDefinition="varchar(12)"
> 			)
> 	public String getId() {
> 		return id;
> 	}
> 	void setId(String id) {
> 		this.id = id;
> 	}
> 	// ]] id
> 	// [[ name ...................................................................
> 	private String name;
> 	@Column(
> 			name="name",
> 			unique=true,
> 			nullable=false,
> 			updatable=true,
> 			length=50,
> 			columnDefinition="varchar(100)"
> 			)
> 	public String getName() {
> 		return name;
> 	}
> 	void setName(String name) {
> 		this.name = name;
> 	}
> 	// ]] name
> 	// [[ organisation ...........................................................
> 	private OrganisationBean organisation;
> 	@ManyToOne(
> //			cascade=CascadeType.ALL,
> 			fetch=FetchType.LAZY,
> 			optional=true
> 			)
> 	@JoinColumn(
> 			name="organisation",
> 			nullable=false
> 			)
> 	public OrganisationBean getOrganisation() {
> 		return organisation;
> 	}
> 	void setOrganisation(OrganisationBean organisation) {
> 		this.organisation = organisation;
> 	}
> 	// ]] organisation
> 	// ]] Component interface ####################################################
> 	// [[ Business Interface #####################################################
> 	public String toString() {
> 		String s = "SiteBean: id = " + this.id;
> 		s += ", name = " + _toString(this.name);
> 		s += ", organisation = " + _toString(this.organisation.toString());
> 		return s;
> 	}
> 	// ]] Business Interface #####################################################
> }
> --- End of BeanB (SiteBean) --------------------------------------------------------------------------------------------------------------------
> --- Start of BeanC (PersonBelongsToSiteBean) -------------------------------------------------------------------------------------------------------------------
> package de.visiomedic.personen;
> import javax.persistence.Column;
> import javax.persistence.Entity;
> import javax.persistence.FetchType;
> import javax.persistence.Id;
> import javax.persistence.JoinColumn;
> import javax.persistence.ManyToOne;
> import javax.persistence.NamedQueries;
> import javax.persistence.NamedQuery;
> import javax.persistence.Table;
> import javax.persistence.UniqueConstraint;
> import de.visiomedic.organisationsstruktur.SiteBean;
> @Entity()
> @NamedQueries( {
> 		@NamedQuery (
> 				name="PersonBelongsToSiteBean.FindAllForOrganisation",
> 				query="SELECT entity FROM PersonBelongsToSiteBeanentity where entity.site.organisation = :organisation" ),
> 		@NamedQuery (
> 				name="PersonBelongsToSiteBean.FindPersonAllForSite",
> 				query="SELECT entity.person FROM PersonBelongsToSiteBeanentity where entity.site = :site" ),
> 		@NamedQuery (
> 				name="PersonBelongsToSiteBean.FindBySiteAndPerson",
> 				query="SELECT entity FROM PersonBelongsToSiteBeanentity where entity.site = :site AND entity.person = :person" ),
> 		@NamedQuery (
> 				name="PersonBelongsToSiteBean.FindSiteAllForPerson",
> 				query="SELECT entity.site FROM PersonBelongsToSiteBeanentity where entity.person = :person" )
> 		}
> )
> @Table(name = "persongehoertzusite", uniqueConstraints={
> 						@UniqueConstraint(columnNames={"id"}),
> 						@UniqueConstraint(columnNames={"person", "site"})})
> public class PersonBelongsToSiteBean implements java.io.Serializable {
> 	public static final long serialVersionUID = 1L;
> 	public static final String SEQUENCE_NAME = "persongehoertzusite_sequence";
> 	// [[ Constructors ###########################################################
> 	PersonGehörtZuSiteBean() {
> 		;
> 	}
> 	PersonGehörtZuSiteBean(final String id,
> 				final SiteBean site, final PersonBean person,
> 				boolean organisationsAdministrator,
> 				boolean siteAdministrator) throws Exception {
> 		this.setId(id);
> 		this.setSite(site);
> 		this.setPerson(person);
> 		this.setOrganisationsAdministrator(organisationsAdministrator);
> 		this.setSiteAdministrator(siteAdministrator);
> 	}
> 	// ]] Constructors ###########################################################
> 	// [[ Component Interface ####################################################
> 	// [[ id .....................................................................
> 	private String id;
> 	@Id
> 	@Column(
> 			name="id",
> 			unique=true,
> 			nullable=false,
> 			updatable=false,
> 			length=12,
> 			columnDefinition="varchar(12)"
> 			)
> 	public String getId() {
> 		return id;
> 	}
> 	void setId(String id) {
> 		this.id = id;
> 	}
> 	// ]] id
> 	// [[ site ...................................................................
> 	private SiteBean site;
> 	@ManyToOne(
> //			cascade=CascadeType.ALL,
> 			fetch=FetchType.EAGER,
> 			optional=false
> 			)
> 	@JoinColumn(
> 			name="site",
> 			nullable=false
> 			)
> 	public SiteBean getSite() {
> 		return site;
> 	}
> 	void setSite(SiteBean site) {
> 		this.site = site;
> 	}
> 	// ]] site
> 	// [[ person .................................................................
> 	private PersonBean person;
> 	@ManyToOne(
> //			cascade=CascadeType.ALL,
> 			fetch=FetchType.EAGER,
> 			optional=false
> 			)
> 	@JoinColumn(
> 			name="person",
> 			nullable=false
> 			)
> 	public PersonBean getPerson() {
> 		return person;
> 	}
> 	void setPerson(PersonBean person) {
> 		this.person = person;
> 	}
> 	// ]] person
> 	// [[ siteAdministrator ......................................................
> 	private boolean siteAdministrator;
> 	@Column(
> 			name="siteAdministrator",
> 			nullable=false,
> 			updatable=true,
> 			columnDefinition="int1"
> 			)
> 	public boolean getSiteAdministrator() {
> 		return siteAdministrator;
> 	}
> 	void setSiteAdministrator(boolean siteAdministrator) {
> 		this.siteAdministrator = siteAdministrator;
> 	}
> 	// ]] siteAdministrator
> 	// [[ organisationsAdministrator .............................................
> 	private boolean organisationsAdministrator;
> 	@Column(
> 			name="organisationsAdministrator",
> 			nullable=false,
> 			updatable=true,
> 			columnDefinition="int1"
> 			)
> 	public boolean getOrganisationsAdministrator() {
> 		return organisationsAdministrator;
> 	}
> 	void setOrganisationsAdministrator(boolean organisationsAdministrator) {
> 		this.organisationsAdministrator = organisationsAdministrator;
> 	}
> 	// ]] organisationsAdministrator
> 	// ]] Component interface ####################################################
> }
> --- End of BeanC (personBelongsToSiteBean) --------------------------------------------------------------------------------------------------------------------
> Now I Try the following
> 			Query query = manager.createNamedQuery("PersonBelongsToSiteBean.FindBySiteAndPerson");
> 			query = query.setParameter("site", site);
> 			query = query.setParameter("person", person);
> 			List l = query.getResultList();
> This fails with the above error message.
> If I change the @FetchType from LAZY to EAGER in Bean B (SiteBean) it works.
> The @FetchType.LAZY annotatiion seems to work fine when the referenced bean does not reference other beans lazily.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       




More information about the jboss-jira mailing list