From: <hib...@li...> - 2006-08-02 00:42:29
|
Author: epbernard Date: 2006-08-01 20:42:25 -0400 (Tue, 01 Aug 2006) New Revision: 10187 Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Article.java Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/Book.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm.xml trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaXClassTest.java Log: ANN-405 partial XML overriden @ManyToOne have unecessary @JoinTable if a default schema is set up EJB-203 xml overriden access type PROPERTY and FIELD were not lower cased leading to CNFE Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/Book.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/Book.java 2006-08-01 23:27:28 UTC (rev 10186) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/Book.java 2006-08-02 00:42:25 UTC (rev 10187) @@ -5,6 +5,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.Version; /** * @author Emmanuel Bernard @@ -16,6 +17,9 @@ public Integer id; public String name; + @Version + public Integer version; + public Integer getId() { return id; } @@ -31,4 +35,12 @@ public void setName(String name) { this.name = name; } + + public Integer getVersion() { + return version; + } + + public void setVersion(Integer version) { + this.version = version; + } } Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java 2006-08-01 23:27:28 UTC (rev 10186) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java 2006-08-02 00:42:25 UTC (rev 10187) @@ -2,10 +2,10 @@ package org.hibernate.ejb.test.transaction; import javax.persistence.EntityManager; -import javax.persistence.EntityNotFoundException; import javax.persistence.LockModeType; import javax.persistence.RollbackException; import javax.persistence.TransactionRequiredException; +import javax.persistence.PersistenceException; import org.hibernate.ejb.HibernateEntityManagerFactory; import org.hibernate.ejb.test.TestCase; @@ -185,14 +185,23 @@ public void testRollbackOnlyOnPersistenceException() throws Exception { Book book = new Book(); book.name = "Stolen keys"; - book.id = new Integer( 50 ); + book.id = null; //new Integer( 50 ); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); try { - em.refresh( book ); - fail( "Get reference on wrong entity should fail" ); + em.persist( book ); + em.flush(); + em.clear(); + book.setName( "kitty kid"); + em.merge( book ); + em.flush(); + em.clear(); + book.setName( "kitty kid2"); //non updated version + em.merge( book ); + em.flush(); + fail( "optimistic locking exception" ); } - catch (EntityNotFoundException e) { + catch (PersistenceException e) { //success } try { Added: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Article.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Article.java 2006-08-01 23:27:28 UTC (rev 10186) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Article.java 2006-08-02 00:42:25 UTC (rev 10187) @@ -0,0 +1,49 @@ +//$Id: $ +package org.hibernate.ejb.test.xml; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.GeneratedValue; +import javax.persistence.CascadeType; +import javax.persistence.ManyToOne; +import javax.persistence.JoinColumn; + +/** + * @author Emmanuel Bernard + */ +@Entity +@Table(name = "ITEM") +...@or...tchSize(size = 10) +public class Article { + private Integer id; + private String name; + + private Article nextArticle; + + @Id @GeneratedValue public Integer getId() { + return id; + } + public void setId(Integer id) { + this.id = id; + } + @Column(name="poopoo") + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + + @ManyToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "NEXT_MESSAGE_ID") + public Article getNextArticle() { + return nextArticle; + } + + public void setNextArticle(Article nextArticle) { + this.nextArticle = nextArticle; + } +} Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java 2006-08-01 23:27:28 UTC (rev 10186) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java 2006-08-02 00:42:25 UTC (rev 10187) @@ -1,30 +1,28 @@ //$Id: $ package org.hibernate.ejb.test.xml; -import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityManager; -import junit.framework.TestCase; -import org.hibernate.ejb.HibernatePersistence; -import org.hibernate.ejb.test.connection.FakeDataSourceException; -import org.hibernate.ejb.test.connection.PersistenceUnitInfoImpl; +import org.hibernate.ejb.test.TestCase; /** * @author Emmanuel Bernard */ public class XmlTest extends TestCase { - public void testPersistenceInfo() throws Exception { - PersistenceUnitInfoImpl info = new PersistenceUnitInfoImpl( - new String[]{ - "org/hibernate/ejb/test/xml/orm.xml", - "org/hibernate/ejb/test/xml/orm2.xml" - } - ); - try { - EntityManagerFactory emf = ( new HibernatePersistence() ).createContainerEntityManagerFactory( info, null ); - fail( "FakeDatasource should have been used" ); - } - catch (FakeDataSourceException fde) { - //success - } + public void testXmlMappingCorrectness() throws Exception { + EntityManager em = factory.createEntityManager(); + em.close(); } + + public Class[] getAnnotatedClasses() { + return new Class[0]; + } + + @Override + public String[] getEjb3DD() { + return new String[] { + "org/hibernate/ejb/test/xml/orm.xml", + "org/hibernate/ejb/test/xml/orm2.xml" + }; + } } Modified: trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm.xml =================================================================== --- trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm.xml 2006-08-01 23:27:28 UTC (rev 10186) +++ trunk/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm.xml 2006-08-02 00:42:25 UTC (rev 10187) @@ -5,6 +5,14 @@ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd" version="1.0" > + <persistence-unit-metadata> + <persistence-unit-defaults> + <schema>MY_SCHEMA</schema> + <catalog>MY_CATALOG</catalog> + <access>PROPERTY</access> + <cascade-persist/> + </persistence-unit-defaults> + </persistence-unit-metadata> <package>org.hibernate.ejb.test.xml</package> <entity class="Light" metadata-complete="true" access="FIELD"> <attributes> @@ -14,4 +22,12 @@ <basic name="power"></basic> </attributes> </entity> + <entity class="Article" + metadata-complete="false"> + <attributes> + <id name="id"> + <generated-value strategy="SEQUENCE"/> + </id> + </attributes> + </entity> </entity-mappings> \ No newline at end of file Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-08-01 23:27:28 UTC (rev 10186) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-08-02 00:42:25 UTC (rev 10187) @@ -453,11 +453,19 @@ } } - private JoinTable overridesDefaultsInJoinTable(XMLContext.Default defaults) { + private JoinTable overridesDefaultsInJoinTable(Annotation annotation, XMLContext.Default defaults) { //no element but might have some default or some annotation + boolean defaultToJoinTable = ! ( super.isAnnotationPresent( JoinColumn.class ) + || super.isAnnotationPresent( JoinColumns.class ) ); + defaultToJoinTable = defaultToJoinTable && + ( ( annotation.annotationType() == ManyToMany.class && StringHelper.isEmpty( ( (ManyToMany) annotation).mappedBy() ) ) + || ( annotation.annotationType() == OneToMany.class && StringHelper.isEmpty( ( (OneToMany) annotation).mappedBy() ) ) + || ( annotation.annotationType() == CollectionOfElements.class ) + ); final Class<JoinTable> annotationType = JoinTable.class; - if ( StringHelper.isNotEmpty( defaults.getCatalog() ) - || StringHelper.isNotEmpty( defaults.getSchema() ) ) { + if ( defaultToJoinTable + && ( StringHelper.isNotEmpty( defaults.getCatalog() ) + || StringHelper.isNotEmpty( defaults.getSchema() ) ) ) { AnnotationDescriptor ad = new AnnotationDescriptor( annotationType ); if ( defaults.canUseJavaAnnotations() ) { JoinTable table = super.getAnnotation( annotationType ); @@ -555,7 +563,7 @@ Annotation annotation = super.getAnnotation( annotationType ); if ( annotation != null ) { annotationList.add( annotation ); - annotation = overridesDefaultsInJoinTable( defaults ); + annotation = overridesDefaultsInJoinTable( annotation, defaults ); if ( annotation != null ) annotationList.add( annotation ); annotation = super.getAnnotation( JoinColumn.class ); if ( annotation != null ) annotationList.add( annotation ); @@ -589,7 +597,7 @@ if ( annotation != null ) annotationList.add( annotation ); } else if ( super.isAnnotationPresent( CollectionOfElements.class ) ) { - annotation = overridesDefaultsInJoinTable( defaults ); + annotation = overridesDefaultsInJoinTable( super.getAnnotation( CollectionOfElements.class ), defaults ); if ( annotation != null ) annotationList.add( annotation ); annotation = super.getAnnotation( JoinColumn.class ); if ( annotation != null ) annotationList.add( annotation ); @@ -958,8 +966,8 @@ private boolean isProcessingId(XMLContext.Default defaults) { boolean isExplicit = defaults.getAccess() != null; boolean correctAccess = - ( PropertyType.PROPERTY.equals( propertyType ) && "property".equalsIgnoreCase( defaults.getAccess() ) ) - || ( PropertyType.FIELD.equals( propertyType ) && "field".equalsIgnoreCase( defaults.getAccess() ) ); + ( PropertyType.PROPERTY.equals( propertyType ) && "property".equals( defaults.getAccess() ) ) + || ( PropertyType.FIELD.equals( propertyType ) && "field".equals( defaults.getAccess() ) ); boolean hasId = defaults.canUseJavaAnnotations() && ( super.isAnnotationPresent( Id.class ) || super.isAnnotationPresent( EmbeddedId.class ) ); //if ( properAccessOnMetadataComplete || properOverridingOnMetadataNonComplete ) { @@ -979,9 +987,9 @@ private boolean computeProperAccessOnMetadataComplete(XMLContext.Default defaults) { return ( ! defaults.canUseJavaAnnotations() ) - && ( ( ! "field".equalsIgnoreCase( defaults.getAccess() ) && ! PropertyType.FIELD + && ( ( ! "field".equals( defaults.getAccess() ) && ! PropertyType.FIELD .equals( propertyType ) ) - || ( "field".equalsIgnoreCase( defaults.getAccess() ) && PropertyType.FIELD.equals( propertyType ) ) ); + || ( "field".equals( defaults.getAccess() ) && PropertyType.FIELD.equals( propertyType ) ) ); } private Columns buildColumns(Element element) { @@ -1198,22 +1206,24 @@ private AccessType getAccessType(Element tree, XMLContext.Default defaults) { String access = tree == null ? null : tree.attributeValue( "access" ); - if ( "FIELD".equals( access ) || "PROPERTY".equals( access ) ) access = access.toLowerCase(); + if ( "FIELD".equals( access ) || "PROPERTY".equals( access ) ) { + access = access.toLowerCase(); + } if ( access != null ) { AnnotationDescriptor ad = new AnnotationDescriptor( AccessType.class ); ad.setValue( "value", access ); - isFieldAccess = "field".equalsIgnoreCase( access ); + isFieldAccess = "field".equals( access ); return AnnotationFactory.create( ad ); } else if ( defaults.canUseJavaAnnotations() && super.isAnnotationPresent( AccessType.class ) ) { AccessType annotation = super.getAnnotation( AccessType.class ); - isFieldAccess = "field".equalsIgnoreCase( annotation != null ? annotation.value() : null ); + isFieldAccess = "field".equals( annotation != null ? annotation.value() : null ); return annotation; } else if ( defaults.getAccess() != null ) { AnnotationDescriptor ad = new AnnotationDescriptor( AccessType.class ); ad.setValue( "value", defaults.getAccess() ); - isFieldAccess = "field".equalsIgnoreCase( defaults.getAccess() ); + isFieldAccess = "field".equals( defaults.getAccess() ); return AnnotationFactory.create( ad ); } else { Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java 2006-08-01 23:27:28 UTC (rev 10186) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java 2006-08-02 00:42:25 UTC (rev 10187) @@ -176,7 +176,12 @@ } protected void setAccess(String access) { - this.access = access; + if ( "FIELD".equals( access ) || "PROPERTY".equals( access ) ) { + this.access = access.toLowerCase(); + } + else { + this.access = access; + } } public String getCatalog() { Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java 2006-08-01 23:27:28 UTC (rev 10186) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java 2006-08-02 00:42:25 UTC (rev 10187) @@ -4,8 +4,8 @@ import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.Hibernate; +import org.hibernate.test.annotations.TestCase; import org.hibernate.cfg.Configuration; -import org.hibernate.test.TestCase; /** * @author Emmanuel Bernard @@ -18,7 +18,7 @@ public void testProxiedBridgeMethod() throws Exception { //bridge methods should not be proxied - Session s = openSession( ); + Session s = openSession(); Transaction tx = s.beginTransaction(); Hammer h = new Hammer(); s.save(h); @@ -35,7 +35,11 @@ super( name ); } - protected String[] getMappings() { + protected Class[] getMappings() { + return new Class[0]; + } + + protected String[] getXmlFiles() { return new String[] { "annotations/bytecode/Hammer.hbm.xml" }; Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaXClassTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaXClassTest.java 2006-08-01 23:27:28 UTC (rev 10186) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaXClassTest.java 2006-08-02 00:42:25 UTC (rev 10187) @@ -41,6 +41,11 @@ assertEquals( grandpa, fatherAsSeenFromSon.getSuperclass() ); } + public void testSuperSuperClass() { + assertEquals( factory.toXClass( Object.class ), grandpa.getSuperclass() ); + assertEquals( null, grandpa.getSuperclass().getSuperclass() ); + } + public void testHasInterfaces() { XClass[] interfaces = fatherAsSeenFromSon.getSuperclass().getInterfaces(); assertEquals( 2, interfaces.length ); |