[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