[hibernate-commits] Hibernate SVN: r17173 - in core/trunk/annotations/src: main/java/org/hibernate/cfg/annotations and 4 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Mon Jul 20 22:07:51 EDT 2009
Author: epbernard
Date: 2009-07-20 22:07:50 -0400 (Mon, 20 Jul 2009)
New Revision: 17173
Added:
core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/CustomizableColumns.java
core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/MapKeyColumnDelegator.java
Modified:
core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/CollectionBinder.java
core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/MapBinder.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/any/PropertyMap.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/collectionelement/LocalizedString.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/indexcoll/Atmosphere.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/target/Brand.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/target/OwnerImpl.java
Log:
ANN-856 implement @MapKeyColumn
Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java 2009-07-21 01:25:22 UTC (rev 17172)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java 2009-07-21 02:07:50 UTC (rev 17173)
@@ -73,6 +73,7 @@
import javax.persistence.ElementCollection;
import javax.persistence.CollectionTable;
import javax.persistence.UniqueConstraint;
+import javax.persistence.MapKeyColumn;
import org.hibernate.AnnotationException;
import org.hibernate.AssertionFailure;
@@ -132,6 +133,8 @@
import org.hibernate.cfg.annotations.QueryBinder;
import org.hibernate.cfg.annotations.SimpleValueBinder;
import org.hibernate.cfg.annotations.TableBinder;
+import org.hibernate.cfg.annotations.MapKeyColumnDelegator;
+import org.hibernate.cfg.annotations.CustomizableColumns;
import org.hibernate.engine.FilterDefinition;
import org.hibernate.engine.Versioning;
import org.hibernate.id.MultipleHiLoPerTableGenerator;
@@ -1538,14 +1541,20 @@
);
}
- org.hibernate.annotations.MapKey hibMapKeyAnn = property.getAnnotation(
- org.hibernate.annotations.MapKey.class
- );
+ Column[] keyColumns = null;
+ //JPA 2 has priority
+ if ( property.isAnnotationPresent( MapKeyColumn.class ) ) {
+ keyColumns = new Column[] { new MapKeyColumnDelegator( property.getAnnotation( MapKeyColumn.class ) ) };
+ }
+ else if ( property.isAnnotationPresent( org.hibernate.annotations.MapKey.class ) ) {
+ keyColumns = property.getAnnotation( org.hibernate.annotations.MapKey.class ).columns();
+ }
+ //nullify empty array
+ keyColumns = keyColumns != null && keyColumns.length > 0 ? keyColumns : null;
+
PropertyData mapKeyVirtualProperty = new WrappedInferredData( inferredData, "mapkey" );
Ejb3Column[] mapColumns = Ejb3Column.buildColumnFromAnnotation(
- hibMapKeyAnn != null && hibMapKeyAnn.columns().length > 0 ?
- hibMapKeyAnn.columns() :
- null,
+ keyColumns,
null,
Nullability.FORCED_NOT_NULL,
propertyHolder,
Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/CollectionBinder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/CollectionBinder.java 2009-07-21 01:25:22 UTC (rev 17172)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/CollectionBinder.java 2009-07-21 02:07:50 UTC (rev 17173)
@@ -39,6 +39,7 @@
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
import javax.persistence.ElementCollection;
+import javax.persistence.MapKeyColumn;
import org.hibernate.AnnotationException;
import org.hibernate.AssertionFailure;
@@ -337,9 +338,11 @@
collection.setRole( StringHelper.qualify( propertyHolder.getPath(), propertyName ) );
collection.setNodeName( propertyName );
- if ( property.isAnnotationPresent( org.hibernate.annotations.MapKey.class ) && mapKeyPropertyName != null ) {
+ if ( (property.isAnnotationPresent( org.hibernate.annotations.MapKey.class )
+ || property.isAnnotationPresent( MapKeyColumn.class ) )
+ && mapKeyPropertyName != null ) {
throw new AnnotationException(
- "Cannot mix @javax.persistence.MapKey and @org.hibernate.annotations.MapKey "
+ "Cannot mix @javax.persistence.MapKey and @MapKeyColumn or @org.hibernate.annotations.MapKey "
+ "on the same collection: " + StringHelper.qualify(
propertyHolder.getPath(), propertyName
)
Added: core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/CustomizableColumns.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/CustomizableColumns.java (rev 0)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/CustomizableColumns.java 2009-07-21 02:07:50 UTC (rev 17173)
@@ -0,0 +1,27 @@
+package org.hibernate.cfg.annotations;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import javax.persistence.Column;
+
+import org.hibernate.annotations.Columns;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at SuppressWarnings({ "ClassExplicitlyAnnotation" })
+public class CustomizableColumns implements Columns {
+ private final Column[] columns;
+
+ public CustomizableColumns(Column[] columns) {
+ this.columns = columns;
+ }
+
+ public Column[] columns() {
+ return columns;
+ }
+
+ public Class<? extends Annotation> annotationType() {
+ return Columns.class;
+ }
+}
Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/MapBinder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/MapBinder.java 2009-07-21 01:25:22 UTC (rev 17172)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/MapBinder.java 2009-07-21 02:07:50 UTC (rev 17173)
@@ -138,13 +138,14 @@
Class target = void.class;
/*
* target has priority over reflection for the map key type
+ * JPA 2 has priority
*/
- if ( property.isAnnotationPresent( org.hibernate.annotations.MapKey.class ) ) {
+ if ( property.isAnnotationPresent( MapKeyClass.class ) ) {
+ target = property.getAnnotation( MapKeyClass.class ).value();
+ }
+ else if ( property.isAnnotationPresent( org.hibernate.annotations.MapKey.class ) ) {
target = property.getAnnotation( org.hibernate.annotations.MapKey.class ).targetElement();
}
- else if ( property.isAnnotationPresent( MapKeyClass.class ) ) {
- target = property.getAnnotation( MapKeyClass.class ).value();
- }
else if ( property.isAnnotationPresent( MapKeyManyToMany.class ) ) {
target = property.getAnnotation( MapKeyManyToMany.class ).targetEntity();
}
Added: core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/MapKeyColumnDelegator.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/MapKeyColumnDelegator.java (rev 0)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/MapKeyColumnDelegator.java 2009-07-21 02:07:50 UTC (rev 17173)
@@ -0,0 +1,61 @@
+package org.hibernate.cfg.annotations;
+
+import java.lang.annotation.Annotation;
+import javax.persistence.Column;
+import javax.persistence.MapKeyColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at SuppressWarnings({ "ClassExplicitlyAnnotation" })
+public class MapKeyColumnDelegator implements Column {
+ private final MapKeyColumn column;
+
+ public MapKeyColumnDelegator(MapKeyColumn column) {
+ this.column = column;
+ }
+
+ public String name() {
+ return column.name();
+ }
+
+ public boolean unique() {
+ return column.unique();
+ }
+
+ public boolean nullable() {
+ return column.nullable();
+ }
+
+ public boolean insertable() {
+ return column.insertable();
+ }
+
+ public boolean updatable() {
+ return column.updatable();
+ }
+
+ public String columnDefinition() {
+ return column.columnDefinition();
+ }
+
+ public String table() {
+ return column.table();
+ }
+
+ public int length() {
+ return column.length();
+ }
+
+ public int precision() {
+ return column.precision();
+ }
+
+ public int scale() {
+ return column.scale();
+ }
+
+ public Class<? extends Annotation> annotationType() {
+ return Column.class;
+ }
+}
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/any/PropertyMap.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/any/PropertyMap.java 2009-07-21 01:25:22 UTC (rev 17172)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/any/PropertyMap.java 2009-07-21 02:07:50 UTC (rev 17173)
@@ -61,7 +61,7 @@
name = "map_properties",
joinColumns = @JoinColumn( name = "map_id" ),
inverseJoinColumns = @JoinColumn( name = "property_id" ) )
- @MapKey( columns = { @Column( name = "map_key" ) } )
+ @MapKey( columns = { @Column( name = "map_key" ) } ) //keep for legacy test
public Map<String, Property> getProperties() {
return properties;
}
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/collectionelement/LocalizedString.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/collectionelement/LocalizedString.java 2009-07-21 01:25:22 UTC (rev 17172)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/collectionelement/LocalizedString.java 2009-07-21 02:07:50 UTC (rev 17173)
@@ -8,6 +8,7 @@
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Embeddable;
+import javax.persistence.MapKeyColumn;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@@ -33,7 +34,7 @@
new HashMap<String, String>( 1 );
@ElementCollection
- @MapKey( columns = @Column( name = "language_code" ) )
+ @MapKeyColumn(name = "language_code" )
@Fetch( FetchMode.JOIN )
@Filter( name = "selectedLocale",
condition = " language_code = :param " )
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/indexcoll/Atmosphere.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/indexcoll/Atmosphere.java 2009-07-21 01:25:22 UTC (rev 17172)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/indexcoll/Atmosphere.java 2009-07-21 02:07:50 UTC (rev 17173)
@@ -11,6 +11,7 @@
import javax.persistence.Column;
import javax.persistence.JoinTable;
import javax.persistence.JoinColumn;
+import javax.persistence.MapKeyColumn;
import org.hibernate.annotations.MapKey;
import org.hibernate.annotations.CollectionOfElements;
@@ -26,7 +27,7 @@
public Integer id;
@ManyToMany(cascade = CascadeType.ALL)
- @MapKey(columns = {@Column(name="gas_name")})
+ @MapKeyColumn(name="gas_name")
public Map<String, Gas> gases = new HashMap<String, Gas>();
@ManyToMany(cascade = CascadeType.ALL)
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/target/Brand.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/target/Brand.java 2009-07-21 01:25:22 UTC (rev 17172)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/target/Brand.java 2009-07-21 02:07:50 UTC (rev 17173)
@@ -8,6 +8,7 @@
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
+import javax.persistence.MapKeyClass;
import org.hibernate.annotations.MapKey;
import org.hibernate.annotations.MapKeyManyToMany;
@@ -22,7 +23,7 @@
private Long id;
@ManyToMany(targetEntity = LuggageImpl.class)
- @MapKey(targetElement = SizeImpl.class)
+ @MapKeyClass(SizeImpl.class)
private Map<Size, Luggage> luggagesBySize = new HashMap<Size, Luggage>();
@ElementCollection(targetClass = SizeImpl.class)
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/target/OwnerImpl.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/target/OwnerImpl.java 2009-07-21 01:25:22 UTC (rev 17172)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/target/OwnerImpl.java 2009-07-21 02:07:50 UTC (rev 17173)
@@ -1,11 +1,7 @@
//$Id$
package org.hibernate.test.annotations.target;
-import java.util.Map;
-import java.util.HashMap;
import javax.persistence.Embeddable;
-import org.hibernate.annotations.MapKey;
-import javax.persistence.ManyToMany;
/**
* @author Emmanuel Bernard
More information about the hibernate-commits
mailing list