[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-4072) ManyToMany with single table inheritance fails when multiple subclasses

david sinclair (JIRA) noreply at atlassian.com
Thu Aug 20 09:22:14 EDT 2009


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-4072?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=33829#action_33829 ] 

david sinclair commented on HHH-4072:
-------------------------------------

I am still digging in on this, but I believe my initial report is not entirely correct. It is the MappedSuperclass with the ManyToMany that is causing the problem, not the single table inheritance.

> ManyToMany with single table inheritance fails when multiple subclasses
> -----------------------------------------------------------------------
>
>                 Key: HHH-4072
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4072
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: envers
>    Affects Versions: 3.3.2
>         Environment: Windows XP, Java 1.6
>            Reporter: david sinclair
>            Priority: Critical
>
> I have a base entity named BusinessSoftwareMatrixElement declare as such
> @Entity
> @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
> @DiscriminatorColumn(name = "software_type", discriminatorType = DiscriminatorType.STRING)
> @DiscriminatorValue("Software")
> @Audited
> BusinessSoftwareMatrixElement ...{ }
> I then have a subclass of BusinessSoftwareMatrixElement  that is a mapped super class which defines a many to many relationship.
> @MappedSuperclass
> @Audited
> public abstract class BusinessOSProcessServiceMatrixElement extends BusinessSoftwareMatrixElement {
>    
>     private Set<BusinessOSMatrixElement> applicableOperatingSystems = new HashSet<BusinessOSMatrixElement>();
> 	@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.REMOVE, CascadeType.REFRESH }, targetEntity = BusinessOSMatrixElement.class)
> 	@JoinTable(name="matrix_elements_procserv_aos",
> 				joinColumns=@JoinColumn(name="sw_guid"),
> 				inverseJoinColumns = @JoinColumn(name="os_guid"))
> 	public Set<BusinessOSMatrixElement> getApplicableOperatingSystems() {
> 		return applicableOperatingSystems;
> 	}
> }
> There are then to subclasses that add no new fields, only different discriminators
> @Entity
> @DiscriminatorValue("Database")
> @Audited
> public class BusinessDBMatrixElement extends BusinessOSProcessServiceMatrixElement {
> @Entity
> @DiscriminatorValue("Application")
> @Audited
> public class BusinessAppMatrixElement extends BusinessOSProcessServiceMatrixElement {
> Running the ant task to create the DDL results in an exception being thrown for that many to many table.
> Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping matrix_elements_procserv_aos_AUD
> 	at org.hibernate.tool.ant.HibernateToolTask.reportException(HibernateToolTask.java:226)
> 	at org.hibernate.tool.ant.HibernateToolTask.execute(HibernateToolTask.java:189)
> 	at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
> 	at org.apache.tools.ant.Task.perform(Task.java:364)
> 	at org.apache.tools.ant.Target.execute(Target.java:341)
> 	at org.apache.maven.plugin.antrun.AbstractAntMojo.executeTasks(AbstractAntMojo.java:108)
> 	... 24 more
> Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping matrix_elements_procserv_aos_AUD
> 	at org.hibernate.cfg.Mappings.addClass(Mappings.java:141)
> 	at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:167)
> 	at org.hibernate.cfg.Configuration.add(Configuration.java:716)
> 	at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:531)
> 	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:291)
> 	at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1162)
> 	at org.hibernate.envers.configuration.AuditConfiguration.getFor(AuditConfiguration.java:102)
> 	at org.hibernate.envers.ant.AnnotationConfigurationTaskWithEnvers.doConfiguration(AnnotationConfigurationTaskWithEnvers.java:38)
> 	at org.hibernate.tool.ant.ConfigurationTask.getConfiguration(ConfigurationTask.java:55)
> 	at org.hibernate.tool.ant.HibernateToolTask.getConfiguration(HibernateToolTask.java:302)
> 	at org.hibernate.tool.ant.Hbm2DDLExporterTask.createExporter(Hbm2DDLExporterTask.java:51)
> 	at org.hibernate.tool.ant.ExporterTask.execute(ExporterTask.java:39)
> 	at org.hibernate.tool.ant.HibernateToolTask.execute(HibernateToolTask.java:186)

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

        


More information about the hibernate-issues mailing list