Author: epbernard
Date: 2006-12-01 13:11:26 -0500 (Fri, 01 Dec 2006)
New Revision: 10908
Added:
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Address.java
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Employee.java
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm3.xml
Modified:
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java
branches/Branch_3_2/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java
Log:
EJB-240 handle attribute override in properties
Added:
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Address.java
===================================================================
---
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Address.java 2006-12-01
14:16:43 UTC (rev 10907)
+++
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Address.java 2006-12-01
18:11:26 UTC (rev 10908)
@@ -0,0 +1,54 @@
+//$Id: $
+package org.hibernate.ejb.test.xml;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Address {
+ private String street;
+ private String city;
+ private String state;
+ private String zip;
+
+ public Address() {
+ }
+
+ public Address(String street, String city, String state, String zip) {
+ this.street = street;
+ this.city = city;
+ this.state = state;
+ this.zip = zip;
+ }
+
+ public String getStreet() {
+ return street;
+ }
+
+ public void setStreet(String street) {
+ this.street = street;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ public String getZip() {
+ return zip;
+ }
+
+ public void setZip(String zip) {
+ this.zip = zip;
+ }
+}
\ No newline at end of file
Added:
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Employee.java
===================================================================
---
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Employee.java 2006-12-01
14:16:43 UTC (rev 10907)
+++
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Employee.java 2006-12-01
18:11:26 UTC (rev 10908)
@@ -0,0 +1,66 @@
+//$Id: $
+package org.hibernate.ejb.test.xml;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Employee {
+ @Id
+ Long id;
+ String name;
+/*
+ @Embedded
+ @AttributeOverrides({
+ @AttributeOverride(name = "street", column = @Column(name =
"HA_street")),
+ @AttributeOverride(name = "city", column = @Column(name =
"HA_city")),
+ @AttributeOverride(name = "state", column = @Column(name =
"HA_state")),
+ @AttributeOverride(name = "zip", column = @Column(name =
"HA_zip")) })
+*/
+ Address homeAddress;
+
+/*
+ @Embedded
+ @AttributeOverrides({
+ @AttributeOverride(name = "street", column = @Column(name =
"MA_street")),
+ @AttributeOverride(name = "city", column = @Column(name =
"MA_city")),
+ @AttributeOverride(name = "state", column = @Column(name =
"MA_state")),
+ @AttributeOverride(name = "zip", column = @Column(name =
"MA_zip")) })
+*/
+ Address mailAddress;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Address getHomeAddress() {
+ return homeAddress;
+ }
+
+ public void setHomeAddress(Address homeAddress) {
+ this.homeAddress = homeAddress;
+ }
+
+ public Address getMailAddress() {
+ return mailAddress;
+ }
+
+ public void setMailAddress(Address mailAddress) {
+ this.mailAddress = mailAddress;
+ }
+}
\ No newline at end of file
Added:
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java
===================================================================
---
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java 2006-12-01
14:16:43 UTC (rev 10907)
+++
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java 2006-12-01
18:11:26 UTC (rev 10908)
@@ -0,0 +1,41 @@
+//$Id: $
+package org.hibernate.ejb.test.xml;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class XmlAttributeOverrideTest extends TestCase {
+
+ public void testAttributeOverriding() throws Exception {
+ EntityManager em = factory.createEntityManager();
+ em.getTransaction().begin();
+
+ Employee e = new Employee();
+ e.setId(Long.valueOf(100));
+ e.setName("Bubba");
+ e.setHomeAddress(new Address("123 Main St", "New York",
"NY", "11111"));
+ e.setMailAddress(new Address("P.O. Box 123", "New York",
"NY", "11111"));
+
+ em.persist(e);
+
+ em.flush();
+
+ em.getTransaction().rollback();
+ em.close();
+ }
+
+ public Class[] getAnnotatedClasses() {
+ return new Class[0];
+ }
+
+ @Override
+ public String[] getEjb3DD() {
+ return new String[] {
+ "org/hibernate/ejb/test/xml/orm3.xml"
+ };
+ }
+}
Modified:
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java
===================================================================
---
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java 2006-12-01
14:16:43 UTC (rev 10907)
+++
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java 2006-12-01
18:11:26 UTC (rev 10908)
@@ -22,7 +22,7 @@
public String[] getEjb3DD() {
return new String[] {
"org/hibernate/ejb/test/xml/orm.xml",
- "org/hibernate/ejb/test/xml/orm2.xml"
+ "org/hibernate/ejb/test/xml/orm2.xml",
};
}
}
Added: branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm3.xml
===================================================================
---
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm3.xml 2006-12-01
14:16:43 UTC (rev 10907)
+++
branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm3.xml 2006-12-01
18:11:26 UTC (rev 10908)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
+ version="1.0">
+
+ <entity class="org.hibernate.ejb.test.xml.Employee"
metadata-complete="false" access="FIELD">
+ <attributes>
+ <id name="id"/>
+ <basic name="name"/>
+
+ <embedded name="homeAddress">
+ <attribute-override name="street">
+ <column name="home_street"/>
+ </attribute-override>
+ <attribute-override name="city">
+ <column name="home_city"/>
+ </attribute-override>
+ <attribute-override name="state">
+ <column name="home_state"/>
+ </attribute-override>
+ <attribute-override name="zip">
+ <column name="home_zip"/>
+ </attribute-override>
+ </embedded>
+
+ <embedded name="mailAddress">
+ <attribute-override name="street">
+ <column name="mail_street"/>
+ </attribute-override>
+ <attribute-override name="city">
+ <column name="mail_city"/>
+ </attribute-override>
+ <attribute-override name="state">
+ <column name="mail_state"/>
+ </attribute-override>
+ <attribute-override name="zip">
+ <column name="mail_zip"/>
+ </attribute-override>
+ </embedded>
+
+ </attributes>
+ </entity>
+
+ <embeddable class="org.hibernate.ejb.test.xml.Address">
+ <attributes>
+ <basic name="street"/>
+ <basic name="city"/>
+ <basic name="state"/>
+ <basic name="zip"/>
+ </attributes>
+ </embeddable>
+
+</entity-mappings>
\ No newline at end of file
Modified:
branches/Branch_3_2/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java
===================================================================
---
branches/Branch_3_2/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-12-01
14:16:43 UTC (rev 10907)
+++
branches/Branch_3_2/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-12-01
18:11:26 UTC (rev 10908)
@@ -11,7 +11,6 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import javax.persistence.AssociationOverride;
import javax.persistence.AssociationOverrides;
import javax.persistence.AttributeOverride;
@@ -358,6 +357,8 @@
if ( current != null ) annotationList.add( current );
current = getTableGenerator( elementsForProperty, defaults );
if ( current != null ) annotationList.add( current );
+ current = getAttributeOverrides( elementsForProperty, defaults );
+ if ( current != null ) annotationList.add( current );
}
processEventAnnotations(annotationList, defaults);
@@ -1159,7 +1160,20 @@
}
private AttributeOverrides getAttributeOverrides(Element tree, XMLContext.Default
defaults) {
- List<AttributeOverride> attributes = (List<AttributeOverride>)
buildAttributeOverrides( tree );
+ List<AttributeOverride> attributes = buildAttributeOverrides( tree );
+ return mergeAttributeOverrides( defaults, attributes );
+ }
+
+ private AttributeOverrides getAttributeOverrides(List<Element> elements,
XMLContext.Default defaults) {
+ List<AttributeOverride> attributes = new ArrayList<AttributeOverride>();
+ for (Element element : elements) {
+ attributes.addAll( buildAttributeOverrides( element ) );
+ }
+ return mergeAttributeOverrides( defaults, attributes );
+ }
+
+ private AttributeOverrides mergeAttributeOverrides(XMLContext.Default defaults,
+ List<AttributeOverride> attributes) {
if ( defaults.canUseJavaAnnotations() ) {
AttributeOverride annotation = super.getAnnotation( AttributeOverride.class );
addAttributeOverrideIfNeeded( annotation, attributes );
@@ -1182,9 +1196,14 @@
private List<AttributeOverride> buildAttributeOverrides(Element element) {
List<Element> subelements = element == null ? null : element.elements(
"attribute-override" );
+ return buildAttributeOverrides( subelements );
+ }
+
+ private List<AttributeOverride> buildAttributeOverrides(List<Element>
subelements) {
List<AttributeOverride> overrides = new ArrayList<AttributeOverride>();
if ( subelements != null && subelements.size() > 0 ) {
for ( Element current : subelements ) {
+ if ( ! current.getName().equals( "attribute-override" ) ) continue;
AnnotationDescriptor override = new AnnotationDescriptor( AttributeOverride.class );
copyStringAttribute( override, current, "name", true );
Element column = current != null ? current.element( "column" ) : null;