Package org.hibernate.test.annotations.xml.ejb3

Source Code of org.hibernate.test.annotations.xml.ejb3.Ejb3XmlManyToOneTest

/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2010 by Red Hat Inc and/or its affiliates or by
* third-party contributors as indicated by either @author tags or express
* copyright attribution statements applied by the authors.  All
* third-party contributions are distributed under license by Red Hat Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA  02110-1301  USA
*/

package org.hibernate.test.annotations.xml.ejb3;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.CascadeType;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.MapsId;
import javax.persistence.UniqueConstraint;

public class Ejb3XmlManyToOneTest extends Ejb3XmlTestCase {

  public void testNoJoins() throws Exception {
    reader = getReader( Entity1.class, "field1", "many-to-one.orm1.xml" );
    assertAnnotationPresent( ManyToOne.class );
    assertAnnotationNotPresent( JoinColumn.class );
    assertAnnotationNotPresent( JoinColumns.class );
    assertAnnotationNotPresent( JoinTable.class );
    assertAnnotationNotPresent( Id.class );
    assertAnnotationNotPresent( MapsId.class );
    assertAnnotationNotPresent( Access.class );
    ManyToOne relAnno = reader.getAnnotation( ManyToOne.class );
    assertEquals( 0, relAnno.cascade().length );
    assertEquals( FetchType.EAGER, relAnno.fetch() );
    assertTrue( relAnno.optional() );
    assertEquals( void.class, relAnno.targetEntity() );
  }

  /**
   * When there's a single join column, we still wrap it with a JoinColumns
   * annotation.
   */
  public void testSingleJoinColumn() throws Exception {
    reader = getReader( Entity1.class, "field1", "many-to-one.orm2.xml" );
    assertAnnotationPresent( ManyToOne.class );
    assertAnnotationNotPresent( JoinColumn.class );
    assertAnnotationPresent( JoinColumns.class );
    assertAnnotationNotPresent( JoinTable.class );
    JoinColumns joinColumnsAnno = reader.getAnnotation( JoinColumns.class );
    JoinColumn[] joinColumns = joinColumnsAnno.value();
    assertEquals( 1, joinColumns.length );
    assertEquals( "col1", joinColumns[0].name() );
    assertEquals( "col2", joinColumns[0].referencedColumnName() );
    assertEquals( "table1", joinColumns[0].table() );
  }

  public void testMultipleJoinColumns() throws Exception {
    reader = getReader( Entity1.class, "field1", "many-to-one.orm3.xml" );
    assertAnnotationPresent( ManyToOne.class );
    assertAnnotationNotPresent( JoinColumn.class );
    assertAnnotationPresent( JoinColumns.class );
    assertAnnotationNotPresent( JoinTable.class );
    JoinColumns joinColumnsAnno = reader.getAnnotation( JoinColumns.class );
    JoinColumn[] joinColumns = joinColumnsAnno.value();
    assertEquals( 2, joinColumns.length );
    assertEquals( "", joinColumns[0].name() );
    assertEquals( "", joinColumns[0].referencedColumnName() );
    assertEquals( "", joinColumns[0].table() );
    assertEquals( "", joinColumns[0].columnDefinition() );
    assertTrue( joinColumns[0].insertable() );
    assertTrue( joinColumns[0].updatable() );
    assertTrue( joinColumns[0].nullable() );
    assertFalse( joinColumns[0].unique() );
    assertEquals( "col1", joinColumns[1].name() );
    assertEquals( "col2", joinColumns[1].referencedColumnName() );
    assertEquals( "table1", joinColumns[1].table() );
    assertEquals( "int", joinColumns[1].columnDefinition() );
    assertFalse( joinColumns[1].insertable() );
    assertFalse( joinColumns[1].updatable() );
    assertFalse( joinColumns[1].nullable() );
    assertTrue( joinColumns[1].unique() );
  }

  public void testJoinTableNoChildren() throws Exception {
    reader = getReader( Entity1.class, "field1", "many-to-one.orm4.xml" );
    assertAnnotationPresent( ManyToOne.class );
    assertAnnotationNotPresent( JoinColumn.class );
    assertAnnotationNotPresent( JoinColumns.class );
    assertAnnotationPresent( JoinTable.class );
    JoinTable joinTableAnno = reader.getAnnotation( JoinTable.class );
    assertEquals( "", joinTableAnno.catalog() );
    assertEquals( "", joinTableAnno.name() );
    assertEquals( "", joinTableAnno.schema() );
    assertEquals( 0, joinTableAnno.joinColumns().length );
    assertEquals( 0, joinTableAnno.inverseJoinColumns().length );
    assertEquals( 0, joinTableAnno.uniqueConstraints().length );
  }

  public void testJoinTableAllChildren() throws Exception {
    reader = getReader( Entity1.class, "field1", "many-to-one.orm5.xml" );
    assertAnnotationPresent( ManyToOne.class );
    assertAnnotationNotPresent( JoinColumn.class );
    assertAnnotationNotPresent( JoinColumns.class );
    assertAnnotationPresent( JoinTable.class );
    JoinTable joinTableAnno = reader.getAnnotation( JoinTable.class );
    assertEquals( "cat1", joinTableAnno.catalog() );
    assertEquals( "table1", joinTableAnno.name() );
    assertEquals( "schema1", joinTableAnno.schema() );

    // JoinColumns
    JoinColumn[] joinColumns = joinTableAnno.joinColumns();
    assertEquals( 2, joinColumns.length );
    assertEquals( "", joinColumns[0].name() );
    assertEquals( "", joinColumns[0].referencedColumnName() );
    assertEquals( "", joinColumns[0].table() );
    assertEquals( "", joinColumns[0].columnDefinition() );
    assertTrue( joinColumns[0].insertable() );
    assertTrue( joinColumns[0].updatable() );
    assertTrue( joinColumns[0].nullable() );
    assertFalse( joinColumns[0].unique() );
    assertEquals( "col1", joinColumns[1].name() );
    assertEquals( "col2", joinColumns[1].referencedColumnName() );
    assertEquals( "table2", joinColumns[1].table() );
    assertEquals( "int", joinColumns[1].columnDefinition() );
    assertFalse( joinColumns[1].insertable() );
    assertFalse( joinColumns[1].updatable() );
    assertFalse( joinColumns[1].nullable() );
    assertTrue( joinColumns[1].unique() );

    // InverseJoinColumns
    JoinColumn[] inverseJoinColumns = joinTableAnno.inverseJoinColumns();
    assertEquals( 2, inverseJoinColumns.length );
    assertEquals( "", inverseJoinColumns[0].name() );
    assertEquals( "", inverseJoinColumns[0].referencedColumnName() );
    assertEquals( "", inverseJoinColumns[0].table() );
    assertEquals( "", inverseJoinColumns[0].columnDefinition() );
    assertTrue( inverseJoinColumns[0].insertable() );
    assertTrue( inverseJoinColumns[0].updatable() );
    assertTrue( inverseJoinColumns[0].nullable() );
    assertFalse( inverseJoinColumns[0].unique() );
    assertEquals( "col3", inverseJoinColumns[1].name() );
    assertEquals( "col4", inverseJoinColumns[1].referencedColumnName() );
    assertEquals( "table3", inverseJoinColumns[1].table() );
    assertEquals( "int", inverseJoinColumns[1].columnDefinition() );
    assertFalse( inverseJoinColumns[1].insertable() );
    assertFalse( inverseJoinColumns[1].updatable() );
    assertFalse( inverseJoinColumns[1].nullable() );
    assertTrue( inverseJoinColumns[1].unique() );

    // UniqueConstraints
    UniqueConstraint[] uniqueConstraints = joinTableAnno
        .uniqueConstraints();
    assertEquals( 2, uniqueConstraints.length );
    assertEquals( "", uniqueConstraints[0].name() );
    assertEquals( 1, uniqueConstraints[0].columnNames().length );
    assertEquals( "col5", uniqueConstraints[0].columnNames()[0] );
    assertEquals( "uq1", uniqueConstraints[1].name() );
    assertEquals( 2, uniqueConstraints[1].columnNames().length );
    assertEquals( "col6", uniqueConstraints[1].columnNames()[0] );
    assertEquals( "col7", uniqueConstraints[1].columnNames()[1] );
  }

  public void testAllAttributes() throws Exception {
    reader = getReader( Entity1.class, "field1", "many-to-one.orm6.xml" );
    assertAnnotationPresent( ManyToOne.class );
    assertAnnotationNotPresent( JoinColumn.class );
    assertAnnotationNotPresent( JoinColumns.class );
    assertAnnotationNotPresent( JoinTable.class );
    assertAnnotationPresent( Id.class );
    assertAnnotationPresent( MapsId.class );
    assertAnnotationPresent( Access.class );
    ManyToOne relAnno = reader.getAnnotation( ManyToOne.class );
    assertEquals( 0, relAnno.cascade().length );
    assertEquals( FetchType.LAZY, relAnno.fetch() );
    assertFalse( relAnno.optional() );
    assertEquals( Entity3.class, relAnno.targetEntity() );
    assertEquals( "col1", reader.getAnnotation( MapsId.class ).value() );
    assertEquals(
        AccessType.PROPERTY, reader.getAnnotation( Access.class )
        .value()
    );
  }

  public void testCascadeAll() throws Exception {
    reader = getReader( Entity1.class, "field1", "many-to-one.orm7.xml" );
    assertAnnotationPresent( ManyToOne.class );
    ManyToOne relAnno = reader.getAnnotation( ManyToOne.class );
    assertEquals( 1, relAnno.cascade().length );
    assertEquals( CascadeType.ALL, relAnno.cascade()[0] );
  }

  public void testCascadeSomeWithDefaultPersist() throws Exception {
    reader = getReader( Entity1.class, "field1", "many-to-one.orm8.xml" );
    assertAnnotationPresent( ManyToOne.class );
    ManyToOne relAnno = reader.getAnnotation( ManyToOne.class );
    assertEquals( 4, relAnno.cascade().length );
    assertEquals( CascadeType.REMOVE, relAnno.cascade()[0] );
    assertEquals( CascadeType.REFRESH, relAnno.cascade()[1] );
    assertEquals( CascadeType.DETACH, relAnno.cascade()[2] );
    assertEquals( CascadeType.PERSIST, relAnno.cascade()[3] );
  }

  /**
   * Make sure that it doesn't break the handler when {@link CascadeType#ALL}
   * is specified in addition to a default cascade-persist or individual
   * cascade settings.
   */
  public void testCascadeAllPlusMore() throws Exception {
    reader = getReader( Entity1.class, "field1", "many-to-one.orm9.xml" );
    assertAnnotationPresent( ManyToOne.class );
    ManyToOne relAnno = reader.getAnnotation( ManyToOne.class );
    assertEquals( 6, relAnno.cascade().length );
    assertEquals( CascadeType.ALL, relAnno.cascade()[0] );
    assertEquals( CascadeType.PERSIST, relAnno.cascade()[1] );
    assertEquals( CascadeType.MERGE, relAnno.cascade()[2] );
    assertEquals( CascadeType.REMOVE, relAnno.cascade()[3] );
    assertEquals( CascadeType.REFRESH, relAnno.cascade()[4] );
    assertEquals( CascadeType.DETACH, relAnno.cascade()[5] );
  }

}
TOP

Related Classes of org.hibernate.test.annotations.xml.ejb3.Ejb3XmlManyToOneTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.