[hibernate-commits] Hibernate SVN: r10451 - in trunk: Hibernate3/src/org/hibernate/engine HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Tue Sep 5 02:53:48 EDT 2006
Author: epbernard
Date: 2006-09-05 02:53:46 -0400 (Tue, 05 Sep 2006)
New Revision: 10451
Added:
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Soldier2.java
trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Troop2.java
Modified:
trunk/Hibernate3/src/org/hibernate/engine/CascadingAction.java
Log:
EJB-221 TransientObjectException raised on proxies during persist_on_fllush.noCascade()
Modified: trunk/Hibernate3/src/org/hibernate/engine/CascadingAction.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/engine/CascadingAction.java 2006-09-04 10:54:02 UTC (rev 10450)
+++ trunk/Hibernate3/src/org/hibernate/engine/CascadingAction.java 2006-09-05 06:53:46 UTC (rev 10451)
@@ -11,6 +11,7 @@
import org.hibernate.LockMode;
import org.hibernate.ReplicationMode;
import org.hibernate.TransientObjectException;
+import org.hibernate.proxy.HibernateProxy;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.collection.PersistentCollection;
import org.hibernate.event.EventSource;
@@ -344,7 +345,9 @@
if ( type.isEntityType() ) {
String childEntityName = ( ( EntityType ) type ).getAssociatedEntityName( session.getFactory() );
- if ( ! isInManagedState( child, session ) && ForeignKeys.isTransient( childEntityName, child, null, session ) ) {
+ if ( ! isInManagedState( child, session )
+ && ! ( child instanceof HibernateProxy ) //a proxy cannot be transient and it breaks ForeignKeys.isTransient
+ && ForeignKeys.isTransient( childEntityName, child, null, session ) ) {
String parentEntiytName = persister.getEntityName();
String propertyName = persister.getPropertyNames()[propertyIndex];
throw new TransientObjectException(
Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java
===================================================================
--- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java 2006-09-04 10:54:02 UTC (rev 10450)
+++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java 2006-09-05 06:53:46 UTC (rev 10451)
@@ -0,0 +1,67 @@
+package org.hibernate.ejb.test.cascade;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+public class FetchTest2 extends TestCase {
+
+ public void testProxyTransientStuff() throws Exception {
+
+ EntityManager em = factory.createEntityManager();
+ em.getTransaction().begin();
+
+ Troop2 disney = new Troop2();
+ disney.setName( "Disney" );
+
+ Soldier2 mickey = new Soldier2();
+ mickey.setName( "Mickey" );
+ mickey.setTroop( disney );
+
+ em.persist( disney );
+ em.persist( mickey );
+
+ em.getTransaction().commit();
+ em.close();
+
+ em = factory.createEntityManager();
+ em.getTransaction().begin();
+
+ Soldier2 soldier = em.find( Soldier2.class, mickey.getId() );
+ soldier.getTroop().getId();
+ try {
+ em.flush();
+ }
+ catch (IllegalStateException e) {
+ fail( "Should not raise an exception" );
+ }
+
+ em.getTransaction().commit();
+ em.close();
+
+ em = factory.createEntityManager();
+ em.getTransaction().begin();
+
+ //load troop wo a proxy
+ disney = em.find( Troop2.class, disney.getId() );
+ soldier = em.find( Soldier2.class, mickey.getId() );
+
+ try {
+ em.flush();
+ }
+ catch (IllegalStateException e) {
+ fail( "Should not raise an exception" );
+ }
+ em.remove( soldier );
+ em.remove( disney );
+ em.getTransaction().commit();
+ em.close();
+ }
+
+ public Class[] getAnnotatedClasses() {
+ return new Class[]{
+ Troop2.class,
+ Soldier2.class
+ };
+ }
+}
Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Soldier2.java
===================================================================
--- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Soldier2.java 2006-09-04 10:54:02 UTC (rev 10450)
+++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Soldier2.java 2006-09-05 06:53:46 UTC (rev 10451)
@@ -0,0 +1,62 @@
+package org.hibernate.ejb.test.cascade;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Soldier2 implements Serializable {
+ private Integer id;
+ private String name;
+ private Troop2 troop;
+
+ @Id
+ @GeneratedValue
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "troop_fk")
+ public Troop2 getTroop() {
+ return troop;
+ }
+
+ public void setTroop(Troop2 troop) {
+ this.troop = troop;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) return true;
+ if ( !( o instanceof Soldier2 ) ) return false;
+
+ final Soldier2 soldier = (Soldier2) o;
+
+ if ( !name.equals( soldier.name ) ) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return name.hashCode();
+ }
+}
Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Troop2.java
===================================================================
--- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Troop2.java 2006-09-04 10:54:02 UTC (rev 10450)
+++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/cascade/Troop2.java 2006-09-05 06:53:46 UTC (rev 10451)
@@ -0,0 +1,40 @@
+package org.hibernate.ejb.test.cascade;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Troop2 implements Serializable {
+
+ /* FAILS: */
+ @Id
+ @GeneratedValue
+ private Integer id;
+ private String name;
+
+ /* WORKS:
+ @Id
+ @GeneratedValue
+ */
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
More information about the hibernate-commits
mailing list