HHH-4691 - xml access type support for embedded-id and embedded

git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@18519 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
Hardy Ferentschik 2010-01-12 18:50:42 +00:00
parent b1f925458e
commit 4224e74d1a
6 changed files with 127 additions and 5 deletions

View File

@ -1,4 +1,4 @@
// $Id:$ // $Id$
/* /*
* Hibernate, Relational Persistence for Idiomatic Java * Hibernate, Relational Persistence for Idiomatic Java
* *
@ -839,6 +839,7 @@ public class JPAOverridenAnnotationReader implements AnnotationReader {
if ( "embedded".equals( element.getName() ) ) { if ( "embedded".equals( element.getName() ) ) {
AnnotationDescriptor ad = new AnnotationDescriptor( Embedded.class ); AnnotationDescriptor ad = new AnnotationDescriptor( Embedded.class );
annotationList.add( AnnotationFactory.create( ad ) ); annotationList.add( AnnotationFactory.create( ad ) );
getAccessType( annotationList, element );
} }
} }
if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) { if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
@ -985,6 +986,7 @@ public class JPAOverridenAnnotationReader implements AnnotationReader {
addIfNotNull( annotationList, annotation ); addIfNotNull( annotationList, annotation );
AnnotationDescriptor ad = new AnnotationDescriptor( EmbeddedId.class ); AnnotationDescriptor ad = new AnnotationDescriptor( EmbeddedId.class );
annotationList.add( AnnotationFactory.create( ad ) ); annotationList.add( AnnotationFactory.create( ad ) );
getAccessType( annotationList, element );
} }
} }
} }

View File

@ -0,0 +1,51 @@
// $Id$
/*
* JBoss, Home of Professional Open Source
* Copyright 2009, Red Hat, Inc. and/or its affiliates, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.hibernate.test.annotations.access.xml;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
* @author Hardy Ferentschik
*/
@Entity
public class Cook {
@Id
@GeneratedValue
private int id;
private Knive favouriteKnife;
public Knive getFavouriteKnife() {
return favouriteKnife;
}
public void setFavouriteKnife(Knive favouriteKnife) {
this.favouriteKnife = favouriteKnife;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}

View File

@ -0,0 +1,46 @@
// $Id: Waiter.java 18506 2010-01-11 20:23:08Z hardy.ferentschik $
/*
* JBoss, Home of Professional Open Source
* Copyright 2009, Red Hat, Inc. and/or its affiliates, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.hibernate.test.annotations.access.xml;
import javax.persistence.Embeddable;
/**
* @author Hardy Ferentschik
*/
@Embeddable
public class Knive {
private String brand;
private int bladeLength;
public int getBladeLength() {
return bladeLength;
}
public void setBladeLength(int bladeLength) {
this.bladeLength = bladeLength;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
}

View File

@ -60,7 +60,7 @@ public class XmlAccessTest extends TestCase {
// now with an additional xml configuration file changing the default access type for Tourist using basic // now with an additional xml configuration file changing the default access type for Tourist using basic
configFiles = new ArrayList<String>(); configFiles = new ArrayList<String>();
configFiles.add("org/hibernate/test/annotations/access/xml/Tourist.xml"); configFiles.add( "org/hibernate/test/annotations/access/xml/Tourist.xml" );
factory = buildSessionFactory( classes, configFiles ); factory = buildSessionFactory( classes, configFiles );
assertAccessType( factory, classUnderTest, AccessType.PROPERTY ); assertAccessType( factory, classUnderTest, AccessType.PROPERTY );
} }
@ -120,7 +120,7 @@ public class XmlAccessTest extends TestCase {
Class<?> classUnderTest = Waiter.class; Class<?> classUnderTest = Waiter.class;
List<Class<?>> classes = new ArrayList<Class<?>>(); List<Class<?>> classes = new ArrayList<Class<?>>();
classes.add( classUnderTest ); classes.add( classUnderTest );
classes.add(Crew.class); classes.add( Crew.class );
List<String> configFiles = new ArrayList<String>(); List<String> configFiles = new ArrayList<String>();
configFiles.add( "org/hibernate/test/annotations/access/xml/Crew.xml" ); configFiles.add( "org/hibernate/test/annotations/access/xml/Crew.xml" );
SessionFactoryImplementor factory = buildSessionFactory( classes, configFiles ); SessionFactoryImplementor factory = buildSessionFactory( classes, configFiles );
@ -131,13 +131,24 @@ public class XmlAccessTest extends TestCase {
Class<?> classUnderTest = RentalCar.class; Class<?> classUnderTest = RentalCar.class;
List<Class<?>> classes = new ArrayList<Class<?>>(); List<Class<?>> classes = new ArrayList<Class<?>>();
classes.add( classUnderTest ); classes.add( classUnderTest );
classes.add(Driver.class); classes.add( Driver.class );
List<String> configFiles = new ArrayList<String>(); List<String> configFiles = new ArrayList<String>();
configFiles.add( "org/hibernate/test/annotations/access/xml/RentalCar.xml" ); configFiles.add( "org/hibernate/test/annotations/access/xml/RentalCar.xml" );
SessionFactoryImplementor factory = buildSessionFactory( classes, configFiles ); SessionFactoryImplementor factory = buildSessionFactory( classes, configFiles );
assertAccessType( factory, classUnderTest, AccessType.PROPERTY ); assertAccessType( factory, classUnderTest, AccessType.PROPERTY );
} }
public void testAccessOnEmbeddedXmlElement() throws Exception {
Class<?> classUnderTest = Cook.class;
List<Class<?>> classes = new ArrayList<Class<?>>();
classes.add( classUnderTest );
classes.add( Knive.class );
List<String> configFiles = new ArrayList<String>();
configFiles.add( "org/hibernate/test/annotations/access/xml/Cook.xml" );
SessionFactoryImplementor factory = buildSessionFactory( classes, configFiles );
assertAccessType( factory, classUnderTest, AccessType.PROPERTY );
}
private SessionFactoryImplementor buildSessionFactory(List<Class<?>> classesUnderTest, List<String> configFiles) { private SessionFactoryImplementor buildSessionFactory(List<Class<?>> classesUnderTest, List<String> configFiles) {
assert classesUnderTest != null; assert classesUnderTest != null;
assert configFiles != null; assert configFiles != null;
@ -153,6 +164,7 @@ public class XmlAccessTest extends TestCase {
} }
// uses the first getter of the tupelizer for the assertions // uses the first getter of the tupelizer for the assertions
private void assertAccessType(SessionFactoryImplementor factory, Class<?> classUnderTest, AccessType accessType) { private void assertAccessType(SessionFactoryImplementor factory, Class<?> classUnderTest, AccessType accessType) {
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() ) EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
.getEntityMetamodel(); .getEntityMetamodel();

View File

@ -0,0 +1,12 @@
<?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 file:/Users/hardy/work/hibernate/core/trunk/annotations/src/main/resources/org/hibernate/ejb/orm_2_0.xsd"
version="2.0">
<package>org.hibernate.test.annotations.access.xml</package>
<entity class="Cook" metadata-complete="false">
<attributes>
<embedded name="favouriteKnife" access="PROPERTY"/>
</attributes>
</entity>
</entity-mappings>

View File

@ -3,7 +3,6 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm file:/Users/hardy/work/hibernate/core/trunk/annotations/src/main/resources/org/hibernate/ejb/orm_2_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm file:/Users/hardy/work/hibernate/core/trunk/annotations/src/main/resources/org/hibernate/ejb/orm_2_0.xsd"
version="2.0"> version="2.0">
<description>Mapping for Crew entity</description>
<package>org.hibernate.test.annotations.access.xml</package> <package>org.hibernate.test.annotations.access.xml</package>
<mapped-superclass class="Crew" metadata-complete="false" access="FIELD"> <mapped-superclass class="Crew" metadata-complete="false" access="FIELD">
<attributes> <attributes>