[Hibernate-JIRA] Created: (EJB-315) unnecessary update when merge managed entity
by Jifeng Liu (JIRA)
unnecessary update when merge managed entity
--------------------------------------------
Key: EJB-315
URL: http://opensource.atlassian.com/projects/hibernate/browse/EJB-315
Project: Hibernate Entity Manager
Issue Type: Bug
Affects Versions: 3.3.1.GA
Environment: Hibernate Core 3.2.5.ga
Hibernate Annotations 3.3.0 GA
hsqldb
Reporter: Jifeng Liu
Attachments: testcase.zip
If the entity in em.merge(entity) is managed entity, the merge operation should be ignored. However it issues a update statement in the test case even if there is no changes.
In the test case, Parent entity has a list of Image entity with Many-To-Many relation. em.merge() somehow marks the list as dirty, which causes the update statement.
The following is trace log of the test case.
07.20,23 INFO ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory
07.20,601 DEBUG SQL - /* insert test.Parent */ insert into Parent (updateDateTime, Parent_No) values (?, ?)
07.20,617 DEBUG SQL - /* insert test.Image */ insert into Image (name, imageNo) values (?, ?)
07.20,617 DEBUG SQL - /* insert collection row test.Parent.images */ insert into Parent_Image (Parent_Parent_No, images_
imageNo) values (?, ?)
07.20,632 DEBUG SQL - /* load test.Parent */ select parent0_.Parent_No as Parent1_0_0_, parent0_.updateDateTime as updat
eDa2_0_0_ from Parent parent0_ where parent0_.Parent_No=?
07.20,648 DEBUG SQL - /* load collection test.Parent.images */ select images0_.Parent_Parent_No as Parent1_1_, images0_.
images_imageNo as images2_1_, image1_.imageNo as imageNo1_0_, image1_.name as name1_0_ from Parent_Image images0_ left o
uter join Image image1_ on images0_.images_imageNo=image1_.imageNo where images0_.Parent_Parent_No=?
07.20,679 DEBUG SQL - /* update test.Parent */ update Parent set updateDateTime=? where Parent_No=? and updateDateTime=?
07.20,679 DEBUG SQL - /* delete collection test.Parent.images */ delete from Parent_Image where Parent_Parent_No=?
07.20,679 DEBUG SQL - /* insert collection row test.Parent.images */ insert into Parent_Image (Parent_Parent_No, images_
imageNo) values (?, ?)
--
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
15 years, 5 months
[Hibernate-JIRA] Created: (HHH-2830) Insert error ignored when using sybase generated identity column
by Martin van Dijken (JIRA)
Insert error ignored when using sybase generated identity column
----------------------------------------------------------------
Key: HHH-2830
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2830
Project: Hibernate3
Issue Type: Bug
Components: core
Affects Versions: 3.2.2
Environment: Hibernate 3.2.2, Sybase 12.5.3
Reporter: Martin van Dijken
All our tables have a single database generated identity column. This column is specified in Sybase as:
objectId numeric(12) identity
A little while ago, Hibernate started throwing NonUniqueObjectExceptions upon insert of a certain object. It turns out, the insert statement could not possibly succeed as the value of one of the columns was larger than the database column. The error is however ignored because Hibernate generates a query:
insert into objectTable (objectName, objectNumericErrorField) values (?,?) select @@ identity
The value of objectNumericErrorField was larger than the database column allows. The insert statement would therefore fail. The select @@identity however would succeed, only because no new row was inserted it would return the previous ID.
Hibernate then assumes the entire query worked fine and would assign the already assigned id to a different object. It would then check whether or not the id was already in use and throw a NonUniqueObjectException
--
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
15 years, 5 months
[Hibernate-JIRA] Created: (HHH-2656) Using EntityMode.DOM4J results in an exception when mapping more than one collection to the root node (node=".")
by Andries Schutte (JIRA)
Using EntityMode.DOM4J results in an exception when mapping more than one collection to the root node (node=".")
----------------------------------------------------------------------------------------------------------------
Key: HHH-2656
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2656
Project: Hibernate3
Issue Type: Bug
Components: core
Affects Versions: 3.2.4.sp1
Environment: Hibernate 3.2.4 SP1, tested with MySQL 5.0.
Reporter: Andries Schutte
When mapping multiple collections to the root node, an exception results (mapping and exception stack trace is shown below). This works fine if only one collection is mapped to the root node, or if one explicitly specifies unique names for each collection parent node. We are unfortunately restricted by having to use customer-defined XSDs, so this is a show-stopper for us.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class entity-name="ProcessImpl" table="PROCESSES" node="Process">
<id name="sysID" column="PROCESS_ID" node="sysID" type="string"/>
<property name="version" column="PROCESS_VERSION" node="version" type="string"/>
<property name="processType" column="PROCESS_TYPE" node="processType" type="string"/>
<property name="status" column="PROCESS_STATE" node="status" type="string"/>
<property name="createDate" column="PROCESS_CREATE_DATE" node="createDate" type="timestamp"/>
<property name="creator" column="PROCESS_CREATOR" node="creator" type="string"/>
<property name="transactionNumber" column="PROCESS_TX_NUMBER" node="transactionNumber" type="long"/>
<property name="modifiedDate" column="PROCESS_MOD_DATE" node="modifiedDate" type="timestamp"/>
<property name="modifier" column="PROCESS_MODIFIER" node="modifier" type="string"/>
<property name="title" column="PROCESS_TITLE" node="title" type="string"/>
<property name="timer" column="PROCESS_TIMER" node="timer" type="string"/>
<property name="currentCSTime" column="PROCESS_CS_TIME" node="currentCSTime" type="timestamp"/>
<bag name="requiredActivities"
table="REQ_ACTIVITIES" node = "." embed-xml="true" lazy="false" cascade="all">
<key column="PROCESS_ID" not-null="true"/>
<element column="REQ_ACTIVITY" type="text" node="requiredActivity"/>
</bag>
<bag name="retractedGuidelines"
table="RET_GUIDELINES" node = "." embed-xml="true" lazy="false" cascade="all">
<key column="PROCESS_ID" not-null="true"/>
<element column="RET_GUIDELINE" type="text" node="retractedGuideline"/>
</bag>
<set name="suspendedGuidelines"
node = "." embed-xml="true" lazy="false" cascade="all">
<key column="PROCESS_ID" not-null="true"/>
<one-to-many entity-name="SuspendedGuidelineImpl"
embed-xml="true" node="suspendedGuideline"/>
</set>
</class>
</hibernate-mapping>
Exception stack trace:
[6/6/07 22:11:41:246 GMT] 00000012 SystemErr R org.hibernate.HibernateException: Found shared references to a collection: ProcessImpl.retractedGuidelines
at org.hibernate.engine.Collections.processReachableCollection(Collections.java:163)
at org.hibernate.event.def.FlushVisitor.processCollection(FlushVisitor.java:37)
at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101)
at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:61)
at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:131)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at com.resonant.persistence.ExternalDataMgrHibernateDom4jImpl.persistHibernateEntity(ExternalDataMgrHibernateDom4jImpl.java:194)
at com.resonant.persistence.ExternalDataMgrHibernateDom4jImpl.store(ExternalDataMgrHibernateDom4jImpl.java:172)
at com.resonant.persistence.PersistenceHibernateDom4jImpl.storeObject(PersistenceHibernateDom4jImpl.java:215)
at com.resonant.persistence.ejb.PersistenceLocalBean.storeObject(PersistenceLocalBean.java:192)
at com.resonant.persistence.ejb.EJSLocalStatelessPersistenceLocalEJB_68e55914.storeObject(EJSLocalStatelessPersistenceLocalEJB_68e55914.java:1179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:615)
at org.springframework.ejb.access.LocalSlsbInvokerInterceptor.invoke(LocalSlsbInvokerInterceptor.java:65)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy2.storeObject(Unknown Source)
at com.resonant.hub.processmanager.ProcessHubImpl.startProcess(ProcessHubImpl.java:179)
at com.resonant.hub.processmanager.ejb.ProcessHubBean.startProcess(ProcessHubBean.java:138)
at com.resonant.hub.processmanager.ejb.EJSRemoteStatelessProcessHubEJB_f45832db.startProcess(EJSRemoteStatelessProcessHubEJB_f45832db.java:208)
at com.resonant.hub.processmanager.ejb._EJSRemoteStatelessProcessHubEJB_f45832db_Tie.startProcess(_EJSRemoteStatelessProcessHubEJB_f45832db_Tie.java:261)
at com.resonant.hub.processmanager.ejb._EJSRemoteStatelessProcessHubEJB_f45832db_Tie._invoke(_EJSRemoteStatelessProcessHubEJB_f45832db_Tie.java:122)
at com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:613)
at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:466)
at com.ibm.rmi.iiop.ORB.process(ORB.java:503)
at com.ibm.CORBA.iiop.ORB.process(ORB.java:1552)
at com.ibm.rmi.iiop.Connection.respondTo(Connection.java:2673)
at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2551)
at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:62)
at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:95)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1510)
--
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
15 years, 5 months
[Hibernate-JIRA] Created: (HHH-3952) Enabling second level caching at runtime
by Galder Zamarreno (JIRA)
Enabling second level caching at runtime
----------------------------------------
Key: HHH-3952
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3952
Project: Hibernate Core
Issue Type: New Feature
Components: caching (L2)
Reporter: Galder Zamarreno
To be able to extend rolling upgrade strategies such as the one explained in http://www.jboss.org/community/docs/DOC-10910
to situations where 2nd level cache is used, some kind of dynamic switch for 2nd level cache would be required.
The requirement comes from the fact that while the old cluster is running, users could update entities in the 2nd level cache after
these entities have been read and loaded into the 2nd level cache in the new cluster. Since the old cluster and the new cluster
does not communicate directly, invalidation messages from the old cluster would not be received by the new cluster and hence,
the new cluster could be interacting with stale data.
The most sensible thing here IMO would be to start the new cluster with 2nd level cache disabled and at some point, when the old
cluster has been completely shut down, turn it on again. This would require exposing some kind of control to be able to do the
switch. for example via JMX.
--
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
15 years, 5 months
[Hibernate-JIRA] Created: (HHH-2140) SQLQueryParser throws ArrayIndexOutOfBoundsException: -1 for SQL query with join mapped as set of string elements
by Artur Jonak (JIRA)
SQLQueryParser throws ArrayIndexOutOfBoundsException: -1 for SQL query with join mapped as set of string elements
-----------------------------------------------------------------------------------------------------------------
Key: HHH-2140
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2140
Project: Hibernate3
Type: Bug
Components: query-sql
Versions: 3.1.3
Reporter: Artur Jonak
I have the following mapping:
<class name="GCPSimpleDocumentImpl" table="GCP_Node" mutable="false">
<id name="DocumentId" />
...
<set name="ApplicationAreas" table="GCP_ApplicationArea" cascade="none" order-by="Name" sort="natural" mutable="false">
<key column="DocumentId"/>
<element type="string" column="Name"/>
</set>
</class>
and I try to run an SQL query:
List result = session.createSQLQuery(
"select distinct {node.*}, {areas.*} from GCP_Node node join GCP_ApplicationArea areas on node.DocumentId=areas.DocumentId " +
"where areas.Name like 'BS - CF%'")
.addEntity("node", GCPSimpleDocumentImpl.class)
.addJoin("areas", "node.ApplicationAreas")
.list();
Unfortunately I get the following exception:
java.lang.ArrayIndexOutOfBoundsException: -1
at org.hibernate.loader.custom.SQLQueryParser.substituteBrackets(SQLQueryParser.java:133)
at org.hibernate.loader.custom.SQLQueryParser.process(SQLQueryParser.java:85)
at org.hibernate.loader.custom.SQLCustomQuery.<init>(SQLCustomQuery.java:157)
at org.hibernate.engine.query.NativeSQLQueryPlan.<init>(NativeSQLQueryPlan.java:20)
at org.hibernate.engine.query.QueryPlanCache.getNativeSQLQueryPlan(QueryPlanCache.java:113)
at org.hibernate.impl.AbstractSessionImpl.getNativeSQLQueryPlan(AbstractSessionImpl.java:137)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:164)
...
--
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
15 years, 5 months
[Hibernate-JIRA] Created: (HHH-3488) CascadingAction.PERSIST.getCascadableChildrenIterator method loading uninitialized collections
by Debra Zarley (JIRA)
CascadingAction.PERSIST.getCascadableChildrenIterator method loading uninitialized collections
----------------------------------------------------------------------------------------------
Key: HHH-3488
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3488
Project: Hibernate Core
Issue Type: Bug
Components: core, documentation
Affects Versions: 3.3.1
Environment: Hibernate version 3.3.1 GA, DB2 version 9
Reporter: Debra Zarley
public Iterator getCascadableChildrenIterator(EventSource session, CollectionType collectionType, Object collection) {
// persists don't cascade to uninitialized collections
return CascadingAction.getAllElementsIterator(session, collectionType, collection);
}
Looks like either the javadoc or the code is incorrect. I am guessing the code, since it makes sense that only loaded collections should be affected. I think it should be:
public Iterator getCascadableChildrenIterator(EventSource session, CollectionType collectionType, Object collection) {
// persists don't cascade to uninitialized collections
return CascadingAction.getLoadedElementsIterator(session, collectionType, collection);
}
--
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
15 years, 5 months
[Hibernate-JIRA] Created: (HBX-982) HBM2JAVA w/ ejb3=true does not generate @IndexColumn annotation
by Parker Whirlow (JIRA)
HBM2JAVA w/ ejb3=true does not generate @IndexColumn annotation
---------------------------------------------------------------
Key: HBX-982
URL: http://opensource.atlassian.com/projects/hibernate/browse/HBX-982
Project: Hibernate Tools
Issue Type: Bug
Components: hbm2java
Affects Versions: 3.2beta10
Environment: HibernateTools 3.2beta10
Reporter: Parker Whirlow
When using the HBM2JAVA tool with 'ejb3=true' to generate EJB annotations, a hibernate mapping consisting of an ordered List doesn't generate the @IndexColumn annotation in the resulting java class. See below:
Mapping document:
<hibernate-mapping package="com.company.ejb3.entity">
<union-subclass name="Person" table="person" extends="AbstractEntity">
<property name="firstName" column="first_name" not-null="true" type="string" length="150"></property>
<list name="addresses" table="person_addresses">
<key column="person" />
<list-index column="address_index" />
<many-to-many column="address" class="Address" />
</list>
</union-subclass>
</hibernate-mapping>
Resulting Person.java snippet:
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="person_addresses", joinColumns = {
@JoinColumn(name="person", nullable=false, updatable=false) }, inverseJoinColumns = {
@JoinColumn(name="address", nullable=false, updatable=false) })
public List<Address> getAddresses() {
return this.addresses;
}
public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
The above should contain:
@IndexColumn(name="address_index")
--
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
15 years, 5 months