[hibernate-commits] Hibernate SVN: r18561 - in core/trunk/entitymanager/src: test/java/org/hibernate/ejb/test/metadata and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Jan 15 05:47:18 EST 2010


Author: epbernard
Date: 2010-01-15 05:47:18 -0500 (Fri, 15 Jan 2010)
New Revision: 18561

Added:
   core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Child.java
   core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Parent.java
Modified:
   core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/AttributeFactory.java
   core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java
   core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/MetadataTest.java
Log:
HHH-4797 Ignore backref properties for JPA 2 model

Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/AttributeFactory.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/AttributeFactory.java	2010-01-15 05:38:57 UTC (rev 18560)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/AttributeFactory.java	2010-01-15 10:47:18 UTC (rev 18561)
@@ -73,10 +73,12 @@
 	 * @param property The Hibernate property descriptor for the attribute
 	 * @param <X> The type of the owner
 	 * @param <Y> The attribute type
-	 * @return The built attribute descriptor
+	 * @return The built attribute descriptor or null if the attribute is not part of the JPA 2 model (eg backrefs)
 	 */
 	@SuppressWarnings({ "unchecked" })
 	public <X, Y> AttributeImplementor<X, Y> buildAttribute(AbstractManagedType<X> ownerType, Property property) {
+		//a back ref is a virtual property created by Hibernate, let's hide it from the JPA model.
+		if ( property.isBackRef() ) return null;
 		final AttributeContext<X> attributeContext = wrap( ownerType, property );
 		final AttributeMetadata<X,Y> attributeMetadata =
 				determineAttributeMetadata( attributeContext, NORMAL_MEMBER_RESOLVER );
@@ -208,7 +210,10 @@
 				final Iterator<Property> subProperties = component.getPropertyIterator();
 				while ( subProperties.hasNext() ) {
 					final Property property = subProperties.next();
-					embeddableType.getBuilder().addAttribute( buildAttribute( embeddableType, property) );
+					final AttributeImplementor<Y, Object> attribute = buildAttribute( embeddableType, property );
+					if ( attribute != null ) {
+						embeddableType.getBuilder().addAttribute( attribute );
+					}
 				}
 				embeddableType.lock();
 				return embeddableType;

Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java	2010-01-15 05:38:57 UTC (rev 18560)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java	2010-01-15 10:47:18 UTC (rev 18561)
@@ -175,7 +175,9 @@
 						continue;
 					}
 					final Attribute attribute = attributeFactory.buildAttribute( jpa2Mapping, property );
-					jpa2Mapping.getBuilder().addAttribute( attribute );
+					if ( attribute != null ) {
+						jpa2Mapping.getBuilder().addAttribute( attribute );
+					}
 				}
 				jpa2Mapping.lock();
 				populateStaticMetamodel( jpa2Mapping );
@@ -192,7 +194,9 @@
 				while ( properties.hasNext() ) {
 					final Property property = properties.next();
 					final Attribute attribute = attributeFactory.buildAttribute( jpa2Mapping, property );
-					jpa2Mapping.getBuilder().addAttribute( attribute );
+					if ( attribute != null ) {
+						jpa2Mapping.getBuilder().addAttribute( attribute );
+					}
 				}
 				jpa2Mapping.lock();
 				populateStaticMetamodel( jpa2Mapping );

Added: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Child.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Child.java	                        (rev 0)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Child.java	2010-01-15 10:47:18 UTC (rev 18561)
@@ -0,0 +1,34 @@
+package org.hibernate.ejb.test.metadata;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name="ejb_child")
+public class Child {
+	private Integer id;
+	private String name;
+
+	@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;
+	}
+}

Modified: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/MetadataTest.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/MetadataTest.java	2010-01-15 05:38:57 UTC (rev 18560)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/MetadataTest.java	2010-01-15 10:47:18 UTC (rev 18561)
@@ -274,6 +274,18 @@
 		assertNull( thing.getSupertype() );
 	}
 
+	public void testOneToManyJoinColumnUnidirectional() throws Exception {
+		final EntityType<Parent> parent = factory.getMetamodel().entity( Parent.class );
+		assertNotNull( parent );
+		final SetAttribute<? super Parent, ?> children = parent.getSet( "children" );
+		assertNotNull( children );
+		assertEquals( 1, parent.getPluralAttributes().size() );
+		assertEquals( 3, parent.getAttributes().size() );
+		final EntityType<Child> child = factory.getMetamodel().entity( Child.class );
+		assertNotNull( child );
+		assertEquals( 2, child.getAttributes().size() );
+	}
+
 	private void ensureProperMember(Set<?> attributes) {
 		//we do not update the set so we are safe
 		@SuppressWarnings( "unchecked" )
@@ -321,7 +333,9 @@
 				Feline.class,
 				Garden.class,
 				Flower.class,
-				JoinedManyToOneOwner.class
+				JoinedManyToOneOwner.class,
+				Parent.class,
+				Child.class
 		};
 	}
 

Added: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Parent.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Parent.java	                        (rev 0)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Parent.java	2010-01-15 10:47:18 UTC (rev 18561)
@@ -0,0 +1,49 @@
+package org.hibernate.ejb.test.metadata;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name="ejb_parent")
+public class Parent {
+	private Integer id;
+	private String name;
+	private Set<Child> children;
+
+	@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;
+	}
+
+	@OneToMany
+	@JoinColumn(name="parent_fk", nullable = false)
+	public Set<Child> getChildren() {
+		return children;
+	}
+
+	public void setChildren(Set<Child> children) {
+		this.children = children;
+	}
+}



More information about the hibernate-commits mailing list