|
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")
+@org.hibernate.annotations.BatchSize(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 );
|