Hibernate SVN: r11208 - in branches/Branch_3_2/HibernateExt/entitymanager/src: java/org/hibernate/ejb/event and 3 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2007-02-15 01:07:38 -0500 (Thu, 15 Feb 2007)
New Revision: 11208
Added:
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java
Modified:
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java
Log:
EJB-266 no longer cascade PERSIST on lazy collections (checked over the test suite and the TCK)
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java 2007-02-14 19:43:45 UTC (rev 11207)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java 2007-02-15 06:07:38 UTC (rev 11208)
@@ -5,7 +5,9 @@
import org.hibernate.event.EventSource;
import org.hibernate.event.def.DefaultPersistEventListener;
-import org.hibernate.persister.entity.EntityPersister;
+import org.hibernate.engine.CascadingAction;
+import org.hibernate.engine.EJB3CascadingAction;
+import org.hibernate.engine.EJB3CascadeStyle;
/**
* Overrides the LifeCycle OnSave call to call the PrePersist operation
@@ -13,6 +15,10 @@
* @author Emmanuel Bernard
*/
public class EJB3PersistEventListener extends DefaultPersistEventListener implements CallbackHandlerConsumer {
+ static {
+ EJB3CascadeStyle.PERSIST_EJB3.hasOrphanDelete(); //triggers class loading
+ }
+
private EntityCallbackHandler callbackHandler;
public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
@@ -43,4 +49,9 @@
return super.saveWithGeneratedId( entity, entityName, anything, source,
requiresImmediateIdAccess );
}
+
+ @Override
+ protected CascadingAction getCascadeAction() {
+ return EJB3CascadingAction.PERSIST_SKIPLAZY;
+ }
}
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java 2007-02-14 19:43:45 UTC (rev 11207)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java 2007-02-15 06:07:38 UTC (rev 11208)
@@ -7,6 +7,7 @@
* @author Emmanuel Bernard
*/
public class EJB3PersistOnFlushEventListener extends EJB3PersistEventListener {
+ @Override
protected CascadingAction getCascadeAction() {
return CascadingAction.PERSIST_ON_FLUSH;
}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java 2007-02-15 06:07:38 UTC (rev 11208)
@@ -0,0 +1,32 @@
+//$Id: $
+package org.hibernate.engine;
+
+/**
+ * Becasue CascadeStyle is not opened and package protected,
+ * I need to subclass and override the persist alias
+ *
+ * Note that This class has to be triggered by EJB3PersistEventListener at class loading time
+ *
+ * TODO get rid of it for 3.3
+ *
+ * @author Emmanuel Bernard
+ */
+public abstract class EJB3CascadeStyle extends CascadeStyle {
+
+ /**
+ * cascade using EJB3CascadingAction
+ */
+ public static final CascadeStyle PERSIST_EJB3 = new CascadeStyle() {
+ public boolean doCascade(CascadingAction action) {
+ return action==EJB3CascadingAction.PERSIST_SKIPLAZY
+ || action==CascadingAction.PERSIST_ON_FLUSH;
+ }
+ public String toString() {
+ return "STYLE_PERSIST_SKIPLAZY";
+ }
+ };
+
+ static {
+ STYLES.put( "persist", PERSIST_EJB3 );
+ }
+}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java 2007-02-15 06:07:38 UTC (rev 11208)
@@ -0,0 +1,47 @@
+//$Id: $
+package org.hibernate.engine;
+
+import java.util.Map;
+import java.util.Iterator;
+
+import org.hibernate.event.EventSource;
+import org.hibernate.HibernateException;
+import org.hibernate.type.CollectionType;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Because of CascadingAction constructor visibility
+ * I need a packaged friendly subclass
+ * TODO Get rid of it for 3.3
+ * @author Emmanuel Bernard
+ */
+public abstract class EJB3CascadingAction extends CascadingAction {
+ private static Log log = LogFactory.getLog( CascadingAction.class );
+ /**
+ * @see org.hibernate.Session#persist(Object)
+ */
+ public static final CascadingAction PERSIST_SKIPLAZY = new CascadingAction() {
+ public void cascade(EventSource session, Object child, String entityName, Object anything, boolean isCascadeDeleteEnabled)
+ throws HibernateException {
+ if ( log.isTraceEnabled() ) {
+ log.trace( "cascading to persist: " + entityName );
+ }
+ session.persist( entityName, child, (Map) anything );
+ }
+ public Iterator getCascadableChildrenIterator(EventSource session, CollectionType collectionType, Object collection) {
+ // persists don't cascade to uninitialized collections
+ return CascadingAction.getLoadedElementsIterator( session, collectionType, collection );
+ }
+ public boolean deleteOrphans() {
+ return false;
+ }
+ public boolean performOnLazyProperty() {
+ return false;
+ }
+ public String toString() {
+ return "ACTION_PERSIST_SKIPLAZY";
+ }
+ };
+
+}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java 2007-02-15 06:07:38 UTC (rev 11208)
@@ -0,0 +1,92 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+@Entity
+public class A {
+
+ @Id
+ @GeneratedValue( strategy = GenerationType.AUTO )
+ private int id;
+
+ private String name;
+
+ @OneToMany( fetch = FetchType.LAZY, mappedBy = "a", cascade = {CascadeType.PERSIST} )
+ private Set<B1> b1List;
+
+ @OneToMany( fetch = FetchType.LAZY, mappedBy = "a", cascade = {CascadeType.PERSIST} )
+ private Set<B2> b2List;
+
+ @OneToMany( fetch = FetchType.LAZY, mappedBy = "a", cascade = {CascadeType.PERSIST} )
+ private Set<B3> b3List;
+
+ @OneToMany( fetch = FetchType.LAZY, mappedBy = "a", cascade = {CascadeType.PERSIST} )
+ private Set<B4> b4List;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public Set<B1> getB1List() {
+ if ( b1List == null )
+ b1List = new HashSet<B1>();
+ return b1List;
+ }
+
+ public void setB1List(Set<B1> list) {
+ b1List = list;
+ }
+
+ public Set<B2> getB2List() {
+ if ( b2List == null )
+ b2List = new HashSet<B2>();
+ return b2List;
+ }
+
+ public void setB2List(Set<B2> list) {
+ b2List = list;
+ }
+
+ public Set<B3> getB3List() {
+ return b3List;
+ }
+
+ public void setB3List(Set<B3> list) {
+ if ( b3List == null )
+ b3List = new HashSet<B3>();
+ b3List = list;
+ }
+
+ public Set<B4> getB4List() {
+ return b4List;
+ }
+
+ public void setB4List(Set<B4> list) {
+ if ( b4List == null )
+ b4List = new HashSet<B4>();
+ b4List = list;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+
+}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java 2007-02-15 06:07:38 UTC (rev 11208)
@@ -0,0 +1,56 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+
+@Entity
+public class B1 {
+
+ @Id
+ @GeneratedValue( strategy = GenerationType.AUTO )
+ private int id;
+
+ @ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
+ @JoinColumn( name = "aId" )
+ private A a;
+
+ @OneToMany( fetch = FetchType.LAZY, mappedBy = "b1", cascade = {CascadeType.PERSIST} )
+ private Set<C1> c1List;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public A getA() {
+ return a;
+ }
+
+ public void setA(A a) {
+ this.a = a;
+ }
+
+ public Set<C1> getC1List() {
+ if ( c1List == null )
+ c1List = new HashSet<C1>();
+ return c1List;
+ }
+
+ public void setC1List(Set<C1> list) {
+ c1List = list;
+ }
+}
\ No newline at end of file
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java 2007-02-15 06:07:38 UTC (rev 11208)
@@ -0,0 +1,55 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+@Entity
+public class B2 {
+
+ @Id
+ @GeneratedValue( strategy = GenerationType.AUTO )
+ private int id;
+
+ @ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
+ @JoinColumn( name = "aId" )
+ private A a;
+
+ @OneToMany( fetch = FetchType.LAZY, mappedBy = "b2", cascade = {CascadeType.PERSIST} )
+ private Set<C2> c2List;
+
+ public A getA() {
+ return a;
+ }
+
+ public void setA(A a) {
+ this.a = a;
+ }
+
+ public Set<C2> getC2List() {
+ if ( c2List == null )
+ c2List = new HashSet<C2>();
+ return c2List;
+ }
+
+ public void setC2List(Set<C2> list) {
+ c2List = list;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java 2007-02-15 06:07:38 UTC (rev 11208)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class B3 {
+
+ @Id
+ @GeneratedValue( strategy = GenerationType.AUTO )
+ private int id;
+
+ @ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
+ @JoinColumn( name = "aId" )
+ private A a;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public A getA() {
+ return a;
+ }
+
+ public void setA(A a) {
+ this.a = a;
+ }
+}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java 2007-02-15 06:07:38 UTC (rev 11208)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class B4 {
+
+ @Id
+ @GeneratedValue( strategy = GenerationType.AUTO )
+ private int id;
+
+ @ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
+ @JoinColumn( name = "aId" )
+ private A a;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public A getA() {
+ return a;
+ }
+
+ public void setA(A a) {
+ this.a = a;
+ }
+}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java 2007-02-15 06:07:38 UTC (rev 11208)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class C1 {
+
+ @Id
+ @GeneratedValue( strategy = GenerationType.AUTO )
+ private int id;
+
+ @ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
+ @JoinColumn( name = "b1Id" )
+ private B1 b1;
+
+ public B1 getB1() {
+ return b1;
+ }
+
+ public void setB1(B1 b1) {
+ this.b1 = b1;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java 2007-02-15 06:07:38 UTC (rev 11208)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class C2 {
+
+ @Id
+ @GeneratedValue( strategy = GenerationType.AUTO )
+ private int id;
+
+ @ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
+ @JoinColumn( name = "b2Id" )
+ private B2 b2;
+
+ public B2 getB2() {
+ return b2;
+ }
+
+ public void setB2(B2 b2) {
+ this.b2 = b2;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java 2007-02-15 06:07:38 UTC (rev 11208)
@@ -0,0 +1,97 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+import org.hibernate.Session;
+import org.hibernate.stat.Statistics;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CascadePersistTest extends TestCase {
+
+ public void testLazyCollectionsStayLazyOnPersist() throws Exception {
+ EntityManager em = factory.createEntityManager();
+ em.getTransaction().begin();
+ //initialize
+ A a = new A();
+ a.setName( "name1" );
+ em.persist( a );
+ a = new A();
+ a.setName( "name2" );
+ em.persist( a );
+ a = new A();
+ a.setName( "name3" );
+ em.persist( a );
+ em.flush();
+ a = em.find( A.class, 1 );
+ for ( int i = 0; i < 3; i++ ) {
+ B1 b1 = new B1();
+ b1.setA( a );
+ em.persist( b1 );
+ }
+ for ( int i = 0; i < 3; i++ ) {
+ B2 b2 = new B2();
+ b2.setA( a );
+ em.persist( b2 );
+ }
+ for ( int i = 0; i < 3; i++ ) {
+ B3 b3 = new B3();
+ b3.setA( a );
+ em.persist( b3 );
+ }
+ for ( int i = 0; i < 3; i++ ) {
+ B4 b4 = new B4();
+ b4.setA( a );
+ em.persist( b4 );
+ }
+ em.flush();
+ B1 b1 = em.find( B1.class, 1 );
+ for ( int i = 0; i < 2; i++ ) {
+ C1 c1 = new C1();
+ c1.setB1( b1 );
+ em.persist( c1 );
+ }
+ B2 b2 = em.find( B2.class, 1 );
+ for ( int i = 0; i < 4; i++ ) {
+ C2 c2 = new C2();
+ c2.setB2( b2 );
+ em.persist( c2 );
+ }
+ em.flush();
+ em.clear();
+
+ //test
+ a = em.find( A.class, 1 );
+ C2 c2 = new C2();
+ for ( B2 anotherB2 : a.getB2List() ) {
+ if ( anotherB2.getId() == 1 ) {
+ anotherB2.getC2List().add( c2 );
+ c2.setB2( anotherB2 );
+ }
+ }
+ Statistics statistics = ( (Session) em.getDelegate() ).getSessionFactory().getStatistics();
+ statistics.setStatisticsEnabled( true );
+ statistics.clear();
+ em.persist( c2 );
+ long loaded = statistics.getEntityLoadCount();
+ assertEquals( 0, loaded );
+ em.flush();
+ em.getTransaction().rollback();
+ em.close();
+ }
+
+ public Class[] getAnnotatedClasses() {
+ return new Class[]{
+ A.class,
+ B1.class,
+ B2.class,
+ B3.class,
+ B4.class,
+ C1.class,
+ C2.class
+ };
+ }
+}
17 years, 2 months
Hibernate SVN: r11207 - in branches/Branch_3_2/HibernateExt/entitymanager/src: test/org/hibernate/ejb/test/callbacks and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2007-02-14 14:43:45 -0500 (Wed, 14 Feb 2007)
New Revision: 11207
Added:
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java
Modified:
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java
Log:
EJB-46 support id assignment in @PrePersist
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java 2007-02-14 05:25:44 UTC (rev 11206)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java 2007-02-14 19:43:45 UTC (rev 11207)
@@ -24,8 +24,6 @@
super();
}
- ;
-
public EJB3DeleteEventListener(EntityCallbackHandler callbackHandler) {
this();
this.callbackHandler = callbackHandler;
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java 2007-02-14 05:25:44 UTC (rev 11206)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java 2007-02-14 19:43:45 UTC (rev 11207)
@@ -27,8 +27,6 @@
super();
}
- ;
-
public EJB3FlushEntityEventListener(EntityCallbackHandler callbackHandler) {
super();
this.callbackHandler = callbackHandler;
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java 2007-02-14 05:25:44 UTC (rev 11206)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java 2007-02-14 19:43:45 UTC (rev 11207)
@@ -1,6 +1,8 @@
//$Id$
package org.hibernate.ejb.event;
+import java.io.Serializable;
+
import org.hibernate.event.EventSource;
import org.hibernate.event.def.DefaultMergeEventListener;
import org.hibernate.persister.entity.EntityPersister;
@@ -21,17 +23,24 @@
super();
}
- ;
-
public EJB3MergeEventListener(EntityCallbackHandler callbackHandler) {
super();
this.callbackHandler = callbackHandler;
}
@Override
- protected boolean invokeSaveLifecycle(Object entity, EntityPersister persister, EventSource source) {
- callbackHandler.preCreate( entity ); //always call the precreate event even if on safe vetoe it
- return super.invokeSaveLifecycle( entity, persister, source );
+ protected Serializable saveWithRequestedId(Object entity, Serializable requestedId, String entityName,
+ Object anything, EventSource source) {
+ callbackHandler.preCreate( entity );
+ return super.saveWithRequestedId( entity, requestedId, entityName, anything,
+ source );
+ }
+ @Override
+ protected Serializable saveWithGeneratedId(Object entity, String entityName, Object anything, EventSource source,
+ boolean requiresImmediateIdAccess) {
+ callbackHandler.preCreate( entity );
+ return super.saveWithGeneratedId( entity, entityName, anything, source,
+ requiresImmediateIdAccess );
}
}
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java 2007-02-14 05:25:44 UTC (rev 11206)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java 2007-02-14 19:43:45 UTC (rev 11207)
@@ -1,6 +1,8 @@
//$Id$
package org.hibernate.ejb.event;
+import java.io.Serializable;
+
import org.hibernate.event.EventSource;
import org.hibernate.event.def.DefaultPersistEventListener;
import org.hibernate.persister.entity.EntityPersister;
@@ -27,8 +29,18 @@
}
@Override
- protected boolean invokeSaveLifecycle(Object entity, EntityPersister persister, EventSource source) {
- callbackHandler.preCreate( entity ); //always call the precreate event even if on safe vetoe it
- return super.invokeSaveLifecycle( entity, persister, source );
+ protected Serializable saveWithRequestedId(Object entity, Serializable requestedId, String entityName,
+ Object anything, EventSource source) {
+ callbackHandler.preCreate( entity );
+ return super.saveWithRequestedId( entity, requestedId, entityName, anything,
+ source );
}
+
+ @Override
+ protected Serializable saveWithGeneratedId(Object entity, String entityName, Object anything, EventSource source,
+ boolean requiresImmediateIdAccess) {
+ callbackHandler.preCreate( entity );
+ return super.saveWithGeneratedId( entity, entityName, anything, source,
+ requiresImmediateIdAccess );
+ }
}
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java 2007-02-14 05:25:44 UTC (rev 11206)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java 2007-02-14 19:43:45 UTC (rev 11207)
@@ -24,8 +24,6 @@
super();
}
- ;
-
public EJB3PostDeleteEventListener(EntityCallbackHandler callbackHandler) {
this.callbackHandler = callbackHandler;
}
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java 2007-02-14 05:25:44 UTC (rev 11206)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java 2007-02-14 19:43:45 UTC (rev 11207)
@@ -24,8 +24,6 @@
super();
}
- ;
-
public EJB3PostInsertEventListener(EntityCallbackHandler callbackHandler) {
this.callbackHandler = callbackHandler;
}
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java 2007-02-14 05:25:44 UTC (rev 11206)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java 2007-02-14 19:43:45 UTC (rev 11207)
@@ -24,8 +24,6 @@
super();
}
- ;
-
public EJB3PostLoadEventListener(EntityCallbackHandler callbackHandler) {
this.callbackHandler = callbackHandler;
}
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java 2007-02-14 05:25:44 UTC (rev 11206)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java 2007-02-14 19:43:45 UTC (rev 11207)
@@ -26,8 +26,6 @@
super();
}
- ;
-
public EJB3PostUpdateEventListener(EntityCallbackHandler callbackHandler) {
this.callbackHandler = callbackHandler;
}
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java 2007-02-14 05:25:44 UTC (rev 11206)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java 2007-02-14 19:43:45 UTC (rev 11207)
@@ -1,6 +1,8 @@
//$Id$
package org.hibernate.ejb.event;
+import java.io.Serializable;
+
import org.hibernate.event.EventSource;
import org.hibernate.event.def.DefaultSaveEventListener;
import org.hibernate.persister.entity.EntityPersister;
@@ -21,16 +23,24 @@
super();
}
- ;
-
public EJB3SaveEventListener(EntityCallbackHandler callbackHandler) {
super();
this.callbackHandler = callbackHandler;
}
@Override
- protected boolean invokeSaveLifecycle(Object entity, EntityPersister persister, EventSource source) {
- callbackHandler.preCreate( entity ); //always call the precreate event even if on safe vetoe it
- return super.invokeSaveLifecycle( entity, persister, source );
+ protected Serializable saveWithRequestedId(Object entity, Serializable requestedId, String entityName,
+ Object anything, EventSource source) {
+ callbackHandler.preCreate( entity );
+ return super.saveWithRequestedId( entity, requestedId, entityName, anything,
+ source );
}
+
+ @Override
+ protected Serializable saveWithGeneratedId(Object entity, String entityName, Object anything, EventSource source,
+ boolean requiresImmediateIdAccess) {
+ callbackHandler.preCreate( entity );
+ return super.saveWithGeneratedId( entity, entityName, anything, source,
+ requiresImmediateIdAccess );
+ }
}
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java 2007-02-14 05:25:44 UTC (rev 11206)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java 2007-02-14 19:43:45 UTC (rev 11207)
@@ -1,6 +1,8 @@
//$Id$
package org.hibernate.ejb.event;
+import java.io.Serializable;
+
import org.hibernate.event.EventSource;
import org.hibernate.event.def.DefaultSaveOrUpdateEventListener;
import org.hibernate.persister.entity.EntityPersister;
@@ -21,16 +23,24 @@
super();
}
- ;
-
public EJB3SaveOrUpdateEventListener(EntityCallbackHandler callbackHandler) {
super();
this.callbackHandler = callbackHandler;
}
@Override
- protected boolean invokeSaveLifecycle(Object entity, EntityPersister persister, EventSource source) {
- callbackHandler.preCreate( entity ); //always call the precreate event even if on safe vetoe it
- return super.invokeSaveLifecycle( entity, persister, source );
+ protected Serializable saveWithRequestedId(Object entity, Serializable requestedId, String entityName,
+ Object anything, EventSource source) {
+ callbackHandler.preCreate( entity );
+ return super.saveWithRequestedId( entity, requestedId, entityName, anything,
+ source );
}
+
+ @Override
+ protected Serializable saveWithGeneratedId(Object entity, String entityName, Object anything, EventSource source,
+ boolean requiresImmediateIdAccess) {
+ callbackHandler.preCreate( entity );
+ return super.saveWithGeneratedId( entity, entityName, anything, source,
+ requiresImmediateIdAccess );
+ }
}
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java 2007-02-14 05:25:44 UTC (rev 11206)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java 2007-02-14 19:43:45 UTC (rev 11207)
@@ -151,13 +151,25 @@
}
+ public void testIdNullSetByPrePersist() throws Exception {
+ Plant plant = new Plant();
+ plant.setName( "Origuna plantula gigantic" );
+ EntityManager em = factory.createEntityManager();
+ em.getTransaction().begin();
+ em.persist( plant );
+ em.flush();
+ em.getTransaction().rollback();
+ em.close();
+ }
+
public Class[] getAnnotatedClasses() {
return new Class[]{
Cat.class,
Translation.class,
Television.class,
RemoteControl.class,
- Rythm.class
+ Rythm.class,
+ Plant.class
};
}
}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java 2007-02-14 19:43:45 UTC (rev 11207)
@@ -0,0 +1,43 @@
+//$Id: $
+package org.hibernate.ejb.test.callbacks;
+
+import javax.persistence.Id;
+import javax.persistence.Entity;
+import javax.persistence.PrePersist;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Plant {
+ @Id
+ private String id;
+ private String name;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @PrePersist
+ private void defineId() {
+ //some (stupid) id generation
+ if ( name.length() > 5 ) {
+ setId( name.substring( 0, 5 ) );
+ }
+ else {
+ setId( name );
+ }
+ }
+}
17 years, 2 months
Hibernate SVN: r11206 - branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2007-02-14 00:25:44 -0500 (Wed, 14 Feb 2007)
New Revision: 11206
Modified:
branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java
Log:
ANN-554 avoid an NPE in failing case
Modified: branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java 2007-02-14 02:47:15 UTC (rev 11205)
+++ branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java 2007-02-14 05:25:44 UTC (rev 11206)
@@ -196,7 +196,7 @@
throw new AnnotationException(
"Referenced property not a (One|Many)ToOne: "
+ StringHelper.qualify(
- value.getReferencedEntityName(), value.getReferencedPropertyName()
+ otherSide.getEntityName(), mappedBy
)
+ " in mappedBy of "
+ StringHelper.qualify( ownerEntity, ownerProperty )
17 years, 2 months
Hibernate SVN: r11205 - branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2007-02-13 21:47:15 -0500 (Tue, 13 Feb 2007)
New Revision: 11205
Modified:
branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules/entity.xml
Log:
EJBTHREE-774
Modified: branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules/entity.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules/entity.xml 2007-02-14 02:39:17 UTC (rev 11204)
+++ branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules/entity.xml 2007-02-14 02:47:15 UTC (rev 11205)
@@ -33,7 +33,7 @@
tests have been designed to represent a concrete example and be a
inspiration source.</para>
- <sect2>
+ <sect2 id="entity-mapping-entity">
<title>Declaring an entity bean</title>
<para>Every bound persistent POJO class is an entity bean and is
@@ -108,7 +108,7 @@
about that.</remark>
</sect3>
- <sect3>
+ <sect3 id="entity-mapping-entity-version" revision="1">
<title>Versioning for optimistic locking</title>
<para>You can add optimistic locking capability to an entity bean
@@ -132,6 +132,11 @@
or a timestamp as per the EJB3 spec. Hibernate support any kind of
type provided that you define and implement the appropriate
<classname>UserVersionType</classname>.</para>
+
+ <para>The application must not alter the version number set up
+ by Hibernate in any way. To artificially increase the version number,
+ check in Hibernate Entity Manager's reference documentation
+ <literal>LockMode.WRITE</literal></para>
</sect3>
</sect2>
17 years, 2 months
Hibernate SVN: r11204 - in branches/Branch_3_2/HibernateExt/annotations/src: test/org/hibernate/test/annotations/onetoone and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2007-02-13 21:39:17 -0500 (Tue, 13 Feb 2007)
New Revision: 11204
Modified:
branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java
branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java
branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java
branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java
Log:
ANN-556 make one to one bidir safe regarding alphabetical order
Modified: branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java 2007-02-14 01:17:31 UTC (rev 11203)
+++ branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java 2007-02-14 02:39:17 UTC (rev 11204)
@@ -1986,7 +1986,7 @@
}
else {
mappings.addSecondPass(
- secondPass
+ secondPass, BinderHelper.isDefault( mappedBy )
);
}
}
Modified: branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2007-02-14 01:17:31 UTC (rev 11203)
+++ branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2007-02-14 02:39:17 UTC (rev 11204)
@@ -297,6 +297,17 @@
iter.remove();
}
}
+
+ //process OneToManySecondPass in order: first
+ iter = secondPasses.iterator();
+ while ( iter.hasNext() ) {
+ SecondPass sp = (SecondPass) iter.next();
+
+ if ( sp instanceof CreateKeySecondPass ) {
+ sp.doSecondPass( classes );
+ iter.remove();
+ }
+ }
super.secondPassCompile();
inSecondPass = false;
Iterator tables = (Iterator<Map.Entry<Table, List<String[]>>>) tableUniqueConstraints.entrySet().iterator();
Modified: branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java 2007-02-14 01:17:31 UTC (rev 11203)
+++ branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java 2007-02-14 02:39:17 UTC (rev 11204)
@@ -4,6 +4,7 @@
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
/**
* @author Emmanuel Bernard
@@ -13,6 +14,7 @@
@Id
String partyId;
- @OneToOne(mappedBy = "party")
+ @OneToOne
+ @PrimaryKeyJoinColumn
PartyAffiliate partyAffiliate;
}
Modified: branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java 2007-02-14 01:17:31 UTC (rev 11203)
+++ branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java 2007-02-14 02:39:17 UTC (rev 11204)
@@ -14,8 +14,7 @@
@Id
String partyId;
- @OneToOne
- @PrimaryKeyJoinColumn
+ @OneToOne(mappedBy="partyAffiliate")
Party party;
String affiliateName;
17 years, 2 months
Hibernate SVN: r11203 - in branches/Branch_3_2/HibernateExt/entitymanager/src: test/org/hibernate/ejb/test/emops and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2007-02-13 20:17:31 -0500 (Tue, 13 Feb 2007)
New Revision: 11203
Added:
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java
branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java
Modified:
branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java
Log:
EJB-722 tests
Modified: branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java 2007-02-14 00:15:37 UTC (rev 11202)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java 2007-02-14 01:17:31 UTC (rev 11203)
@@ -131,7 +131,7 @@
/**
* Used to inject a datasource object as the connection provider.
- * If used, be sure to <b>not override</b> the {@link Environment.CONNECTION_PROVIDER}
+ * If used, be sure to <b>not override</b> the hibernate.connection.provider_class
* property
*/
public void setDataSource(DataSource ds) {
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java 2007-02-14 01:17:31 UTC (rev 11203)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+@Entity
+@Inheritance( strategy = InheritanceType.JOINED )
+public class Cat extends Pet {
+ int lives;
+
+ public int getLives() {
+ return lives;
+ }
+
+ public void setLives(int lives) {
+ this.lives = lives;
+ }
+}
\ No newline at end of file
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java 2007-02-14 01:17:31 UTC (rev 11203)
@@ -0,0 +1,51 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+@Entity
+public class Decorate implements java.io.Serializable {
+
+ private int id;
+
+ private String name;
+
+ private Pet pet;
+
+ public Decorate() {
+ super();
+
+ }
+
+ @Id
+ @GeneratedValue( strategy = GenerationType.AUTO )
+ public int getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ @OneToOne( fetch = FetchType.LAZY )
+ public Pet getPet() {
+ return pet;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setPet(Pet pet) {
+ this.pet = pet;
+ }
+}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java 2007-02-14 01:17:31 UTC (rev 11203)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+@Entity
+@Inheritance( strategy = InheritanceType.JOINED )
+public class Dog extends Pet {
+ private int numBones;
+
+ public int getNumBones() {
+ return numBones;
+ }
+
+ public void setNumBones(int numBones) {
+ this.numBones = numBones;
+ }
+}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java 2007-02-14 01:17:31 UTC (rev 11203)
@@ -0,0 +1,124 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.HashSet;
+
+import javax.persistence.Query;
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FlushTest extends TestCase {
+ private static Set<String> names= new HashSet<String>();
+ static {
+ names.add("Toonses");
+ names.add("Sox");
+ names.add("Winnie");
+ names.add("Junior");
+ }
+
+ //Test for EJBTHREE-722
+ public void testFlushOnDetached() throws Exception {
+ EntityManager manager = factory.createEntityManager( );
+
+ manager.getTransaction().begin();
+ Pet p1 = createCat("Toonses", 15.0, 9, manager);
+ manager.flush();
+ manager.clear();
+
+ Pet p2 = createCat("Sox", 10.0, 5, manager);
+ manager.flush();
+ manager.clear();
+
+ Pet p3 = createDog("Winnie", 70.0, 5, manager);
+ manager.flush();
+ manager.clear();
+
+ Pet p4 = createDog("Junior", 11.0, 1, manager);
+ manager.flush();
+ manager.clear();
+
+ Decorate d1 = createDecorate("Test", p1, manager);
+ manager.flush();
+ manager.clear();
+
+ Decorate d2 = createDecorate("Test2", p2, manager);
+ manager.flush();
+ manager.clear();
+
+ List l = findByWeight(14.0, manager);
+ manager.flush();
+ manager.clear();
+ for (Object o : l) {
+ assertTrue( names.contains( ( (Pet) o).getName() ) );
+ }
+
+ Collection<Decorate> founds = getDecorate(manager);
+ manager.flush();
+ manager.clear();
+ for (Decorate value : founds) {
+ assertTrue( names.contains( value.getPet().getName() ) );
+ }
+
+ }
+
+ public Dog createDog(String name, double weight, int bones, EntityManager manager) {
+ Dog dog = new Dog();
+ dog.setName(name);
+ dog.setWeight(weight);
+ dog.setNumBones(bones);
+ manager.persist(dog);
+ return dog;
+ }
+
+ public Cat createCat(String name, double weight, int lives, EntityManager manager) {
+ Cat cat = new Cat();
+ cat.setName(name);
+ cat.setWeight(weight);
+ cat.setLives(lives);
+ manager.persist(cat);
+ return cat;
+ }
+
+ public List findByWeight(double weight, EntityManager manager) {
+ return manager.createQuery(
+ "select p from Pet p where p.weight < :weight").setParameter(
+ "weight", weight).getResultList();
+ }
+
+ public Decorate createDecorate(String name, Pet pet, EntityManager manager) {
+ Decorate dec = new Decorate();
+ dec.setName(name);
+ dec.setPet(pet);
+ manager.persist(dec);
+ return dec;
+ }
+
+ public Collection<Decorate> getDecorate(EntityManager manager) {
+ Collection<Decorate> founds = new ArrayList<Decorate>();
+ Query query = manager.createQuery("SELECT o FROM Decorate o");
+ List list = query.getResultList();
+ for (Object obj : list) {
+ if (obj instanceof Decorate) {
+ founds.add((Decorate) obj);
+ }
+ }
+ return founds;
+ }
+
+ public Class[] getAnnotatedClasses() {
+ return new Class[] {
+ Pet.class,
+ Dog.class,
+ Cat.class,
+ Decorate.class
+ };
+ }
+}
Added: branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java (rev 0)
+++ branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java 2007-02-14 01:17:31 UTC (rev 11203)
@@ -0,0 +1,43 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+@Entity
+@Inheritance( strategy = InheritanceType.JOINED )
+public class Pet implements java.io.Serializable {
+ private int id;
+ private String name;
+ private double weight;
+
+ @Id
+ @GeneratedValue( strategy = GenerationType.AUTO )
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public double getWeight() {
+ return weight;
+ }
+
+ public void setWeight(double weight) {
+ this.weight = weight;
+ }
+}
17 years, 2 months
Hibernate SVN: r11202 - in branches/Branch_3_2/HibernateExt/annotations/src: java/org/hibernate/cfg/annotations and 1 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2007-02-13 19:15:37 -0500 (Tue, 13 Feb 2007)
New Revision: 11202
Modified:
branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java
branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java
branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java
branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java
Log:
ANN-104 support for custom SQL on secondary tables
Modified: branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java 2007-02-13 22:48:55 UTC (rev 11201)
+++ branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java 2007-02-14 00:15:37 UTC (rev 11202)
@@ -43,17 +43,44 @@
* sequential select for a secondary table defined on a subclass, which will be issued only if a row
* turns out to represent an instance of the subclass. Inner joins will still be used to retrieve a
* secondary defined by the class and its superclasses.
+ *
+ * <b>Only applies to secondary tables</b>
*/
FetchMode fetch() default FetchMode.JOIN;
/**
* If enabled, Hibernate will not try to insert or update the properties defined by this join.
+ *
+ * <b>Only applies to secondary tables</b>
*/
boolean inverse() default false;
/**
* If enabled, Hibernate will insert a row only if the properties defined by this join are non-null
* and will always use an outer join to retrieve the properties.
+ *
+ * <b>Only applies to secondary tables</b>
*/
boolean optional() default true;
+
+ /**
+ * Defines a custom SQL insert statement
+ *
+ * <b>Only applies to secondary tables</b>
+ */
+ SQLInsert sqlInsert() default @SQLInsert(sql="");
+
+ /**
+ * Defines a custom SQL update statement
+ *
+ * <b>Only applies to secondary tables</b>
+ */
+ SQLUpdate sqlUpdate() default @SQLUpdate(sql="");
+
+ /**
+ * Defines a custom SQL delete statement
+ *
+ * <b>Only applies to secondary tables</b>
+ */
+ SQLDelete sqlDelete() default @SQLDelete(sql="");
}
Modified: branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java 2007-02-13 22:48:55 UTC (rev 11201)
+++ branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java 2007-02-14 00:15:37 UTC (rev 11202)
@@ -625,6 +625,24 @@
join.setSequentialSelect( FetchMode.JOIN != matchingTable.fetch() );
join.setInverse( matchingTable.inverse() );
join.setOptional( matchingTable.optional() );
+ if ( ! BinderHelper.isDefault( matchingTable.sqlInsert().sql() ) ) {
+ join.setCustomSQLInsert( matchingTable.sqlInsert().sql().trim(),
+ matchingTable.sqlInsert().callable(),
+ ExecuteUpdateResultCheckStyle.parse( matchingTable.sqlInsert().check().toString().toLowerCase() )
+ );
+ }
+ if ( ! BinderHelper.isDefault( matchingTable.sqlUpdate().sql() ) ) {
+ join.setCustomSQLUpdate( matchingTable.sqlUpdate().sql().trim(),
+ matchingTable.sqlUpdate().callable(),
+ ExecuteUpdateResultCheckStyle.parse( matchingTable.sqlUpdate().check().toString().toLowerCase() )
+ );
+ }
+ if ( ! BinderHelper.isDefault( matchingTable.sqlDelete().sql() ) ) {
+ join.setCustomSQLDelete( matchingTable.sqlDelete().sql().trim(),
+ matchingTable.sqlDelete().callable(),
+ ExecuteUpdateResultCheckStyle.parse( matchingTable.sqlDelete().check().toString().toLowerCase() )
+ );
+ }
}
else {
//default
Modified: branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java 2007-02-13 22:48:55 UTC (rev 11201)
+++ branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java 2007-02-14 00:15:37 UTC (rev 11202)
@@ -15,6 +15,7 @@
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.Tables;
import org.hibernate.annotations.FetchMode;
+import org.hibernate.annotations.SQLInsert;
/**
* @author Emmanuel Bernard
@@ -27,7 +28,8 @@
@Tables( {
@Table(appliesTo = "Cat", indexes = @Index(name = "secondname",
columnNames = "secondName"), comment = "My cat table" ),
- @Table(appliesTo = "Cat2", foreignKey = @ForeignKey(name="FK_CAT2_CAT"), fetch = FetchMode.SELECT)
+ @Table(appliesTo = "Cat2", foreignKey = @ForeignKey(name="FK_CAT2_CAT"), fetch = FetchMode.SELECT,
+ sqlInsert=@SQLInsert(sql="insert into Cat2(storyPart2, id) values(upper(?), ?)") )
} )
public class Cat implements Serializable {
Modified: branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java 2007-02-13 22:48:55 UTC (rev 11201)
+++ branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java 2007-02-14 00:15:37 UTC (rev 11202)
@@ -157,6 +157,24 @@
s.close();
}
+ public void testCustomSQL() throws Exception {
+ Cat cat = new Cat();
+ String storyPart2 = "My long story";
+ cat.setStoryPart2( storyPart2 );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+
+ s.persist( cat );
+ s.flush();
+ s.clear();
+
+ Cat c = (Cat) s.get( Cat.class, cat.getId() );
+ assertEquals( storyPart2.toUpperCase(), c.getStoryPart2() );
+
+ tx.rollback();
+ s.close();
+ }
+
/**
* @see org.hibernate.test.annotations.TestCase#getMappings()
*/
17 years, 2 months
Hibernate SVN: r11201 - branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2007-02-13 17:48:55 -0500 (Tue, 13 Feb 2007)
New Revision: 11201
Modified:
branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java
Log:
ANN-252 inattentive user safety net
Modified: branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java 2007-02-13 22:20:24 UTC (rev 11200)
+++ branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java 2007-02-13 22:48:55 UTC (rev 11201)
@@ -380,6 +380,11 @@
|| AnnotatedClassType.NONE.equals( classType ) //to be ignored
|| AnnotatedClassType.EMBEDDABLE.equals( classType ) //allow embeddable element declaration
) {
+ if ( AnnotatedClassType.NONE.equals( classType )
+ && clazzToProcess.isAnnotationPresent( org.hibernate.annotations.Entity.class ) ) {
+ log.warn("Class annotated @org.hibernate.annotations.Entity but not javax.persistence.Entity "
+ + "(most likely a user error): " + clazzToProcess.getName() );
+ }
return;
}
if ( !classType.equals( AnnotatedClassType.ENTITY ) ) {
17 years, 2 months
Hibernate SVN: r11200 - in branches/Branch_3_2/HibernateExt/annotations/src: java/org/hibernate/cfg and 2 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2007-02-13 17:20:24 -0500 (Tue, 13 Feb 2007)
New Revision: 11200
Modified:
branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java
branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java
branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java
branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java
branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java
Log:
ANN-444 ability to define fetchmode, inverse and optional to a secondary table
Modified: branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java 2007-02-13 21:04:24 UTC (rev 11199)
+++ branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java 2007-02-13 22:20:24 UTC (rev 11200)
@@ -31,8 +31,29 @@
/**
* Defines the Foreign Key name of a secondary table
- * back to the propary table
+ * back to the primary table
*/
ForeignKey foreignKey() default @ForeignKey( name="" );
+ /**
+ * If set to JOIN, the default, Hibernate will use an inner join to retrieve a
+ * secondary table defined by a class or its superclasses and an outer join for a
+ * secondary table defined by a subclass.
+ * If set to select then Hibernate will use a
+ * sequential select for a secondary table defined on a subclass, which will be issued only if a row
+ * turns out to represent an instance of the subclass. Inner joins will still be used to retrieve a
+ * secondary defined by the class and its superclasses.
+ */
+ FetchMode fetch() default FetchMode.JOIN;
+
+ /**
+ * If enabled, Hibernate will not try to insert or update the properties defined by this join.
+ */
+ boolean inverse() default false;
+
+ /**
+ * If enabled, Hibernate will insert a row only if the properties defined by this join are non-null
+ * and will always use an outer join to retrieve the properties.
+ */
+ boolean optional() default true;
}
Modified: branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java 2007-02-13 21:04:24 UTC (rev 11199)
+++ branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java 2007-02-13 22:20:24 UTC (rev 11200)
@@ -220,6 +220,7 @@
//TODO support @ForeignKey
join.setKey( key );
join.setSequentialSelect( false );
+ //TODO support for inverse and optional
join.setOptional( true ); //perhaps not quite per-spec, but a Good Thing anyway
key.setCascadeDeleteEnabled( false );
Iterator mappedByColumns = otherSideProperty.getValue().getColumnIterator();
Modified: branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java 2007-02-13 21:04:24 UTC (rev 11199)
+++ branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java 2007-02-13 22:20:24 UTC (rev 11200)
@@ -38,6 +38,7 @@
import org.hibernate.annotations.Tuplizers;
import org.hibernate.annotations.Tuplizer;
import org.hibernate.annotations.Immutable;
+import org.hibernate.annotations.FetchMode;
import org.hibernate.cache.CacheFactory;
import org.hibernate.cfg.AnnotationBinder;
import org.hibernate.cfg.BinderHelper;
@@ -500,9 +501,6 @@
SimpleValue key = new DependantValue( join.getTable(), persistentClass.getIdentifier() );
join.setKey( key );
setFKNameIfDefined(join);
- join.setSequentialSelect( false );
- join.setInverse( false );
- join.setOptional( true ); //perhaps not quite per-spec, but a Good Thing anyway
key.setCascadeDeleteEnabled( false );
TableBinder.bindFk( persistentClass, null, ejb3JoinColumns, key, false, mappings );
join.createPrimaryKey();
@@ -511,6 +509,13 @@
}
private void setFKNameIfDefined(Join join) {
+ org.hibernate.annotations.Table matchingTable = findMatchingComplimentTableAnnotation( join );
+ if (matchingTable != null && ! BinderHelper.isDefault( matchingTable.foreignKey().name() ) ) {
+ ( (SimpleValue) join.getKey() ).setForeignKeyName( matchingTable.foreignKey().name() );
+ }
+ }
+
+ private org.hibernate.annotations.Table findMatchingComplimentTableAnnotation(Join join) {
String tableName = join.getTable().getQuotedName();
org.hibernate.annotations.Table table = annotatedClass.getAnnotation( org.hibernate.annotations.Table.class );
org.hibernate.annotations.Table matchingTable = null;
@@ -518,7 +523,7 @@
matchingTable = table;
}
else {
- org.hibernate.annotations.Tables tables = annotatedClass.getAnnotation( org.hibernate.annotations.Tables.class );
+ Tables tables = annotatedClass.getAnnotation( Tables.class );
if ( tables != null) {
for (org.hibernate.annotations.Table current : tables.value() ) {
if ( tableName.equals( current.appliesTo() ) ) {
@@ -528,9 +533,7 @@
}
}
}
- if (matchingTable != null && ! BinderHelper.isDefault( matchingTable.foreignKey().name() ) ) {
- ( (SimpleValue) join.getKey() ).setForeignKeyName( matchingTable.foreignKey().name() );
- }
+ return matchingTable;
}
public void firstLevelSecondaryTablesBinding(
@@ -547,10 +550,9 @@
}
}
+ //Used for @*ToMany @JoinTable
public Join addJoin(JoinTable joinTable, PropertyHolder holder, boolean noDelayInPkColumnCreation) {
- Join join = addJoin( null, joinTable, holder, noDelayInPkColumnCreation );
- join.setOptional( true );
- return join;
+ return addJoin( null, joinTable, holder, noDelayInPkColumnCreation );
}
/**
@@ -566,29 +568,29 @@
String catalog;
String table;
String realTable;
- UniqueConstraint[] uniqueCosntraintsAnn;
+ UniqueConstraint[] uniqueConstraintsAnn;
if ( secondaryTable != null ) {
schema = secondaryTable.schema();
catalog = secondaryTable.catalog();
table = secondaryTable.name();
realTable = mappings.getNamingStrategy().tableName( table ); //always an explicit table name
- uniqueCosntraintsAnn = secondaryTable.uniqueConstraints();
+ uniqueConstraintsAnn = secondaryTable.uniqueConstraints();
}
else if ( joinTable != null ) {
schema = joinTable.schema();
catalog = joinTable.catalog();
table = joinTable.name();
realTable = mappings.getNamingStrategy().tableName( table ); //always an explicit table name
- uniqueCosntraintsAnn = joinTable.uniqueConstraints();
+ uniqueConstraintsAnn = joinTable.uniqueConstraints();
}
else {
throw new AssertionFailure( "Both JoinTable and SecondaryTable are null" );
}
- List uniqueConstraints = new ArrayList( uniqueCosntraintsAnn == null ?
+ List uniqueConstraints = new ArrayList( uniqueConstraintsAnn == null ?
0 :
- uniqueCosntraintsAnn.length );
- if ( uniqueCosntraintsAnn != null && uniqueCosntraintsAnn.length != 0 ) {
- for ( UniqueConstraint uc : uniqueCosntraintsAnn ) {
+ uniqueConstraintsAnn.length );
+ if ( uniqueConstraintsAnn != null && uniqueConstraintsAnn.length != 0 ) {
+ for ( UniqueConstraint uc : uniqueConstraintsAnn ) {
uniqueConstraints.add( uc.columnNames() );
}
}
@@ -617,9 +619,22 @@
.getName()
);
}
+
+ org.hibernate.annotations.Table matchingTable = findMatchingComplimentTableAnnotation( join );
+ if (matchingTable != null) {
+ join.setSequentialSelect( FetchMode.JOIN != matchingTable.fetch() );
+ join.setInverse( matchingTable.inverse() );
+ join.setOptional( matchingTable.optional() );
+ }
+ else {
+ //default
+ join.setSequentialSelect( false );
+ join.setInverse( false );
+ join.setOptional( true ); //perhaps not quite per-spec, but a Good Thing anyway
+ }
+
if ( noDelayInPkColumnCreation ) {
createPrimaryColumnsToSecondaryTable( joinColumns, propertyHolder, join );
-
}
else {
secondaryTables.put( table, join );
Modified: branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java 2007-02-13 21:04:24 UTC (rev 11199)
+++ branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java 2007-02-13 22:20:24 UTC (rev 11200)
@@ -14,6 +14,7 @@
import org.hibernate.annotations.Table;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.Tables;
+import org.hibernate.annotations.FetchMode;
/**
* @author Emmanuel Bernard
@@ -26,7 +27,7 @@
@Tables( {
@Table(appliesTo = "Cat", indexes = @Index(name = "secondname",
columnNames = "secondName"), comment = "My cat table" ),
- @Table(appliesTo = "Cat2", foreignKey = @ForeignKey(name="FK_CAT2_CAT") )
+ @Table(appliesTo = "Cat2", foreignKey = @ForeignKey(name="FK_CAT2_CAT"), fetch = FetchMode.SELECT)
} )
public class Cat implements Serializable {
Modified: branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java 2007-02-13 21:04:24 UTC (rev 11199)
+++ branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java 2007-02-13 22:20:24 UTC (rev 11200)
@@ -140,6 +140,23 @@
}
}
+ public void testFetchModeOnSecondaryTable() throws Exception {
+ Cat cat = new Cat();
+ cat.setStoryPart2( "My long story" );
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+
+ s.persist( cat );
+ s.flush();
+ s.clear();
+
+ s.get( Cat.class, cat.getId() );
+ //Find a way to test it, I need to define the secondary table on a subclass
+
+ tx.rollback();
+ s.close();
+ }
+
/**
* @see org.hibernate.test.annotations.TestCase#getMappings()
*/
17 years, 2 months
Hibernate SVN: r11199 - branches/Branch_3_2/Hibernate3/src/org/hibernate/engine.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2007-02-13 16:04:24 -0500 (Tue, 13 Feb 2007)
New Revision: 11199
Modified:
branches/Branch_3_2/Hibernate3/src/org/hibernate/engine/NamedSQLQueryDefinition.java
Log:
mark method as deprecated, annotations does not use it
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/engine/NamedSQLQueryDefinition.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/engine/NamedSQLQueryDefinition.java 2007-02-13 21:04:10 UTC (rev 11198)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/engine/NamedSQLQueryDefinition.java 2007-02-13 21:04:24 UTC (rev 11199)
@@ -124,6 +124,9 @@
* This form used from annotations (?). Essentially the same as the above using a
* resultset-mapping reference, but without cacheMode, readOnly, and comment.
*
+ * FIXME: annotations do not use it, so it can be remove from my POV
+ * @deprecated
+ *
* @param query The sql query string
* @param resultSetRef The result-set-mapping name
* @param querySpaces Any specified query spaces (used for auto-flushing)
17 years, 2 months