[Hibernate-JIRA] Commented: (HHH-1739) HILO id can cause deadlock: Part deux
by Martin Slava (JIRA)
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1739?page=c... ]
Martin Slava commented on HHH-1739:
-----------------------------------
Hi,
I have the same problem too. There is a problem with database connection closing in
org.hibernate.engine.transaction.Isolater. In nested class method JdbcDelegate.delegateWork()
is issue in finally block. Code session.getBatcher().closeConnection( connection ); must be
out of the if statement block. This issue is fixed in version 3.2 RC4.
MS
> HILO id can cause deadlock: Part deux
> -------------------------------------
>
> Key: HHH-1739
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1739
> Project: Hibernate3
> Type: Bug
> Components: core
> Versions: 3.1.3
> Environment: Hibernate 3.1.3 running JDK 1.4.1_07 Solaris 5.8
> Adaptive Server Enterprise/12.5.2/EBF 12054 ESD#2/P/Sun_svr4/OS 5.8/ase1252/1844/64-bit/FBO/Thu Aug 12 10:51:11 2004
> Reporter: Kirk Rasmussen
>
> Original Estimate: 1 minute
> Remaining: 1 minute
>
> This is mostly a duplicate of HB-1246 but with a twist. I believe that there is a flaw in Hibernate's design for how it generates ids for some dialects. This is a particular problem for deep object graphs and/or at high volume. Or at least it is a problem for those of us stuck on the crappy Sybase platform.
> We have an application that creates hundreds of objects that need ids generated within a single transaction. It is quite common for us to potentially exhaust the connection pool with a deep object graph. We are persisting a Trade object which has a complex and deep object graph (upwards of 100s of persistent objects). Within each trade there are roughly 15 classes which need generated ids with 30 or more instances of each class in some cases.
> IMO The design flaw is when the ids are generated. From quickly browsing the source it seems that they are being generated on the fly as the objects are being processed. This can result in running of out database connections when under load or when a particular trade has a large number of persistent object instances and deadlocking the system.
> A better design would be if the ids could be generated for all tables in a single transaction up front rather than issuing a whole bunch of individual transactions for each table and object.
> I believe that TOPLink generates all its ids up front to avoid the described resource thrashing. It also has the configuration to generate ids from within the same transaction as the original unit of work or from a secondary unit of work.
> See org.hibernate.id.MultipleHiLoPerTableGenerator
--
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....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
18 years, 3 months
[Hibernate-JIRA] Updated: (HBX-446) one-to-many relation with not-null attribute on key element
by Max Rydahl Andersen (JIRA)
[ http://opensource.atlassian.com/projects/hibernate/browse/HBX-446?page=all ]
Max Rydahl Andersen updated HBX-446:
------------------------------------
Fix Version: 3.2beta9
(was: 3.2beta8)
> one-to-many relation with not-null attribute on key element
> -----------------------------------------------------------
>
> Key: HBX-446
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HBX-446
> Project: Hibernate Tools
> Type: Bug
> Components: hbm2java
> Environment: 3.x
> Reporter: Sreeram Katta
> Priority: Critical
> Fix For: 3.2beta9
>
>
> one-to-many relation with not-null attribute on key element is throwing below error when I run the hbm2java tool. I have a base class with a joined-subclass and the joined subclass has one-to-many relationship with another class. The one-to-many uses a list. When I specify not-null attribute on the key element in the relationship I get the below error. If I remove it I don't get this error. If I let the key stay not-null, during run time persistence fails. So I had to revert the mapping file at runtime for the persistence to go fine. It is only the tool that is misbehaving.
> ----------------> Error
> org.hibernate.tool.hbm2x.ExporterException: Error while processing t
> emplate pojo/javaclass.vm
> at org.apache.tools.ant.Task.perform(Task.java:373)
> at org.apache.tools.ant.Target.execute(Target.java:341)
> at org.apache.tools.ant.Target.performTasks(Target.java:369)
> at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
> at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
> at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
> at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
> at org.apache.tools.ant.Main.runBuild(Main.java:668)
> at org.apache.tools.ant.Main.startAnt(Main.java:187)
> at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
> at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)
> Caused by: org.hibernate.tool.hbm2x.ExporterException: Error while processing template pojo/javaclass.vm
> at org.hibernate.tool.hbm2x.TemplateHelper.processTemplate(TemplateHelper.java:89)
> at org.hibernate.tool.hbm2x.POJOExporter.runVelocity(POJOExporter.java:78)
> at org.hibernate.tool.hbm2x.POJOExporter.exportPersistentClass(POJOExporter.java:61)
> at org.hibernate.tool.hbm2x.POJOExporter.start(POJOExporter.java:111)
> at org.hibernate.tool.ant.GeneratorTask.execute(GeneratorTask.java:33)
> at org.hibernate.tool.ant.HibernateToolTask.execute(HibernateToolTask.java:115)
> at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
> at org.apache.tools.ant.Task.perform(Task.java:364)
> -----------------
> mapping files
> -----------> Base class
> <?xml version="1.0"?>
> <!DOCTYPE hibernate-mapping PUBLIC
> "-//Hibernate/Hibernate Mapping DTD//EN"
> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
> <hibernate-mapping package="test.resources.core">
> <class
> name="Resource"
> table="Resource" polymorphism="explicit"
> >
> <id
> name="Id"
> type="integer"
> column="resourceId"
> >
> <meta attribute="use-in-equals">true</meta>
> <generator class="hilo">
> <param name="table">ResourceIdTracker</param>
> <param name="column">resourceId</param>
> </generator>
> </id>
> <property
> name="ResourceName"
> column="resourceName"
> type="string"
> not-null="true"
> length="80"
> />
> <property
> name="ResourceDescription"
> column="resourceDescription"
> type="string"
> not-null="true"
> length="255"
> />
> <property
> name="ResourceTypeId"
> column="resourceTypeId"
> type="integer"
> not-null="true"
> length="10"
> />
> <property
> name="CreatedBy"
> column="createdBy"
> type="integer"
> not-null="true"
> length="10"
> />
> <property
> name="CreatedTime"
> column="createdTime"
> type="timestamp"
> not-null="true"
> length="23"
> />
> <property
> name="LastUpdatedBy"
> column="lastUpdatedBy"
> type="integer"
> not-null="true"
> length="10"
> />
> <property
> name="LastUpdatedTime"
> column="lastUpdatedTime"
> type="timestamp"
> not-null="true"
> length="23"
> />
> <property
> name="Deleted"
> column="deleted"
> type="string"
> not-null="true"
> length="1"
> />
> <set name="ResourcePermissions" table="ResourcePermission" inverse="true">
> <key column="resourceId" not-null="true"/>
> <one-to-many class="ResourcePermission"/>
> </set>
> </class>
> </hibernate-mapping>
> --------------------> JOINED SUBCLASS
> <?xml version="1.0"?>
> <!DOCTYPE hibernate-mapping PUBLIC
> "-//Hibernate/Hibernate Mapping DTD//EN"
> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
> <hibernate-mapping package="test.resources.chartbook">
> <joined-subclass
> name="ChartDefinition"
> table="ChartDefinition"
> extends="test.resources.core.Resource"
> >
> <key column="chartDefinitionId"/>
> <property
> name="FromDate"
> column="fromDate"
> type="integer"
> not-null="false"
> length="10"
> />
> <property
> name="ToDate"
> column="toDate"
> type="integer"
> not-null="false"
> length="10"
> />
> <property
> name="Period"
> column="period"
> type="string"
> not-null="false"
> length="32"
> />
> <property
> name="ViewType"
> column="viewType"
> type="string"
> not-null="false"
> length="32"
> />
> <!-- This works but requires bidrecitional setting -->
> <one-to-one name="chartAxisDefinition" cascade="all-delete-orphan" class="ChartAxisDefinition"/>
> <!-- having a not-null attribute on key is thowing error while generating classes where as -->
> <!-- not having it is throwing an error while inserting -->
> <!-- for now removing while code generation and adding it back while run time -->
> <!-- NEED TO ADDRESS THIS -->
> <list name="ChartSeries" cascade="all-delete-orphan" inverse="false" lazy="false">
> <key column="chartDefinitionId" not-null="true"/>
> <list-index column="position" />
> <one-to-many class="ChartSeries"/>
> </list>
> </joined-subclass>
> </hibernate-mapping>
> --------------> ONE TO MANY TARGET
> <?xml version="1.0"?>
> <!DOCTYPE hibernate-mapping PUBLIC
> "-//Hibernate/Hibernate Mapping DTD//EN"
> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
> <hibernate-mapping package="test.resources.chartbook">
> <class
> name="ChartSeries"
> table="ChartSeries"
> >
> <id
> name="Id"
> type="integer"
> column="chartSeriesId"
> >
> <generator class="hilo">
> <param name="table">ResourceIdTracker</param>
> <param name="column">resourceId</param>
> </generator>
> </id>
> <property
> name="Included"
> column="included"
> type="string"
> not-null="true"
> length="1"
> />
> <property
> name="SelectorTreeNodePath"
> column="selectorTreeNodePath"
> type="string"
> not-null="false"
> length="1024"
> />
> <property
> name="Attribute"
> column="attribute"
> type="string"
> not-null="false"
> length="50"
> />
> <property
> name="ColumnName"
> column="columnName"
> type="string"
> not-null="false"
> length="255"
> />
> <property
> name="Formula"
> column="formula"
> type="string"
> not-null="false"
> />
> <property
> name="AxisLocation"
> column="axisLocation"
> type="string"
> not-null="true"
> length="32"
> />
> <property
> name="Position"
> column="position"
> type="integer"
> not-null="true"
> length="10"
> insert="false"
> update="false"
> />
> </class>
> </hibernate-mapping>
> -------------- ONE TO ONE TARGET
> <?xml version="1.0"?>
> <!DOCTYPE hibernate-mapping PUBLIC
> "-//Hibernate/Hibernate Mapping DTD//EN"
> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
> <hibernate-mapping package="test.resources.chartbook">
> <class
> name="ChartAxisDefinition"
> table="ChartAxisDefinition"
> >
> <id
> name="Id"
> type="integer"
> column="chartAxisDefinitionId"
> >
> <generator class="foreign">
> <param name="property">ChartDefinition</param>
> </generator>
> </id>
> <property
> name="LeftAxisMin"
> column="leftAxisMin"
> type="java.lang.Double"
> not-null="true"
> length="15"
> />
> <property
> name="LeftAxisMax"
> column="leftAxisMax"
> type="java.lang.Double"
> not-null="true"
> length="15"
> />
> <property
> name="RightAxisMin"
> column="rightAxisMin"
> type="java.lang.Double"
> not-null="true"
> length="15"
> />
> <property
> name="RightAxisMax"
> column="rightAxisMax"
> type="java.lang.Double"
> not-null="true"
> length="15"
> />
> <property
> name="LeftAxisLabel"
> column="leftAxisLabel"
> type="string"
> not-null="true"
> length="32"
> />
> <property
> name="RightAxisLabel"
> column="rightAxisLabel"
> type="string"
> not-null="true"
> length="32"
> />
> <property
> name="ChartName"
> column="chartName"
> type="string"
> not-null="true"
> length="80"
> />
> <one-to-one name="ChartDefinition" class="ChartDefinition" constrained="true"/>
> </class>
> </hibernate-mapping>
--
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....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
18 years, 3 months