[hibernate-commits] Hibernate SVN: r20746 - in core/trunk: core/src/main/java/org/hibernate/cfg and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Sep 29 05:12:52 EDT 2010


Author: epbernard
Date: 2010-09-29 05:12:51 -0400 (Wed, 29 Sep 2010)
New Revision: 20746

Modified:
   core/trunk/core/src/main/java/org/hibernate/annotations/ReadWriteExpression.java
   core/trunk/core/src/main/java/org/hibernate/cfg/Ejb3Column.java
   core/trunk/documentation/manual/src/main/docbook/en-US/content/basic_mapping.xml
   core/trunk/testsuite/src/test/java/org/hibernate/test/annotations/various/readwriteexpression/Staff.java
Log:
HHH-4510 Allow forColumn to be left if a property has a single column

Modified: core/trunk/core/src/main/java/org/hibernate/annotations/ReadWriteExpression.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/annotations/ReadWriteExpression.java	2010-09-28 23:50:53 UTC (rev 20745)
+++ core/trunk/core/src/main/java/org/hibernate/annotations/ReadWriteExpression.java	2010-09-29 09:12:51 UTC (rev 20746)
@@ -44,7 +44,7 @@
 	/**
 	 * (Logical) column name for which the expression is used
 	 */
-	String forColumn();
+	String forColumn() default "";
 
 	/**
 	 * Custom SQL expression used to read from the column

Modified: core/trunk/core/src/main/java/org/hibernate/cfg/Ejb3Column.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/cfg/Ejb3Column.java	2010-09-28 23:50:53 UTC (rev 20745)
+++ core/trunk/core/src/main/java/org/hibernate/cfg/Ejb3Column.java	2010-09-29 09:12:51 UTC (rev 20746)
@@ -495,7 +495,8 @@
 	}
 
 	private void processExpression(ReadWriteExpression annotation) {
-		if ( annotation != null && annotation.forColumn().equals( logicalColumnName ) ) {
+		String nonNullLogicalColumnName = logicalColumnName != null ? logicalColumnName : ""; //use the default for annotations 
+		if ( annotation != null && annotation.forColumn().equals( nonNullLogicalColumnName ) ) {
 			readExpression = annotation.read();
 			if ( StringHelper.isEmpty( readExpression ) ) {
 				readExpression = null;

Modified: core/trunk/documentation/manual/src/main/docbook/en-US/content/basic_mapping.xml
===================================================================
--- core/trunk/documentation/manual/src/main/docbook/en-US/content/basic_mapping.xml	2010-09-28 23:50:53 UTC (rev 20745)
+++ core/trunk/documentation/manual/src/main/docbook/en-US/content/basic_mapping.xml	2010-09-29 09:12:51 UTC (rev 20746)
@@ -5794,7 +5794,6 @@
 class CreditCard {
    @Column(name="credit_card_num")
    @ReadWriteExpression(
-      forColumn="credit_card_num", 
       read="decrypt(credit_card_num)", 
       write="encrypt(?)")
    public String getCreditCardNumber() { return creditCardNumber; }
@@ -5812,12 +5811,30 @@
 &lt;/property&gt;</programlisting>
 
     <note>
-      <para>When using <classname>@ReadWriteExpression</classname>, you must
-      explicitly declare the <literal>@Column.name</literal> property. You can
-      use the plural form <classname>@ReadWriteExpressions</classname> if more
-      than one columns need to define either of these rules.</para>
+      <para>You can use the plural form
+      <classname>@ReadWriteExpressions</classname> if more than one columns
+      need to define either of these rules.</para>
     </note>
 
+    <para>If a property uses more that one column, you must use the
+    <literal>forColumn</literal> attribute to specify which column, the
+    expressions are targeting.</para>
+
+    <programlisting role="JAVA">@Entity
+class User {
+   @Type(type="com.acme.type.CreditCardType")
+   @Columns( {
+      @Column(name="credit_card_num"),
+      @Column(name="exp_date") } )
+   @ReadWriteExpression(
+      forColumn="credit_card_num", 
+      read="decrypt(credit_card_num)", 
+      write="encrypt(?)")
+   public CreditCard getCreditCard() { return creditCard; }
+   public void setCreditCard(CreditCard card) { this.creditCard = card; }
+   private CreditCard creditCard;
+}</programlisting>
+
     <para>Hibernate applies the custom expressions automatically whenever the
     property is referenced in a query. This functionality is similar to a
     derived-property <literal>formula</literal> with two differences:

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/annotations/various/readwriteexpression/Staff.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/annotations/various/readwriteexpression/Staff.java	2010-09-28 23:50:53 UTC (rev 20745)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/annotations/various/readwriteexpression/Staff.java	2010-09-29 09:12:51 UTC (rev 20746)
@@ -57,9 +57,7 @@
 	public void setSizeInInches(double sizeInInches) {  this.sizeInInches = sizeInInches; }
 	private double sizeInInches;
 
-	@Column(name="radiusS")
 	@ReadWriteExpression(
-			forColumn = "radiusS",
 			read = "radiusS / 2.54",
 			write = "? * 2.54" )
 	public double getRadiusS() { return radiusS; }



More information about the hibernate-commits mailing list