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 @@
</property></programlisting>
<note>
- <para>When using <classname>@ReadWriteExpression</classname>, you
must
- explicitly declare the <literal>(a)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; }
Show replies by date