[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