[hibernate-commits] Hibernate SVN: r18582 - in core/trunk/annotations/src/test/java/org/hibernate/test/annotations: idclassgeneratedvalue and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Jan 19 13:50:29 EST 2010


Author: steve.ebersole at jboss.com
Date: 2010-01-19 13:50:29 -0500 (Tue, 19 Jan 2010)
New Revision: 18582

Added:
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/IdClassGeneratedValueTest.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/Simple.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/Simple2.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/SimplePK.java
Log:
HHH-4552 - Support generated value within composite keys


Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/IdClassGeneratedValueTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/IdClassGeneratedValueTest.java	                        (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/IdClassGeneratedValueTest.java	2010-01-19 18:50:29 UTC (rev 18582)
@@ -0,0 +1,134 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
+ * indicated by the @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.idclassgeneratedvalue;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * A test.
+ *
+ * @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
+ */
+public class IdClassGeneratedValueTest extends TestCase {
+
+	@SuppressWarnings({ "unchecked" })
+	public void testBaseLine() {
+		Session s = openSession();
+		s.beginTransaction();
+		Simple s1 = new Simple( 1L, 2L, 10 );
+		s.persist( s1 );
+		Simple s2 = new Simple( 2L, 3L, 20 );
+		s.persist( s2 );
+		s.getTransaction().commit();
+		s.close();
+
+		s = openSession();
+		s.beginTransaction();
+		List<Simple> simpleList = s.createQuery( "select s from Simple s" ).list();
+		assertEquals( simpleList.size(), 2 );
+		s1 = (Simple) s.load( Simple.class, new SimplePK( 1L, 2L ) );
+		assertEquals( s1.getQuantity(), 10 );
+		s.clear();
+		s.createQuery( "delete Simple" ).executeUpdate();
+		s.getTransaction().commit();
+		s.close();
+	}
+
+	@SuppressWarnings({ "unchecked" })
+	public void testSingleGeneratedValue() {
+		Session s = openSession();
+		s.beginTransaction();
+		Simple2 s1 = new Simple2( 200L, 10 );
+		s.persist( s1 );
+		Long s1Id1 = s1.getId1();
+		Simple2 s2 = new Simple2( 300L, 20 );
+		s.persist( s2 );
+		s.getTransaction().commit();
+		s.close();
+
+		s = openSession();
+		s.beginTransaction();
+		List<Simple> simpleList = s.createQuery( "select s from Simple2 s" ).list();
+		assertEquals( simpleList.size(), 2 );
+		s1 = (Simple2) s.load( Simple2.class, new SimplePK( s1Id1, 2L ) );
+		assertEquals( s1.getQuantity(), 10 );
+		s.clear();
+		s.createQuery( "delete Simple2" ).executeUpdate();
+		s.getTransaction().commit();
+		s.close();
+	}
+
+//	public void testComplexIdClass() {
+//		Session s = openSession();
+//		Transaction tx = s.beginTransaction();
+//
+//		Customer c1 = new Customer(
+//				"foo", "bar", "contact1", "100", new BigDecimal( 1000 ), new BigDecimal( 1000 ), new BigDecimal( 1000 )
+//		);
+//
+//		s.persist( c1 );
+//		Item boat = new Item();
+//		boat.setId( "1" );
+//		boat.setName( "cruiser" );
+//		boat.setPrice( new BigDecimal( 500 ) );
+//		boat.setDescription( "a boat" );
+//		boat.setCategory( 42 );
+//
+//		s.persist( boat );
+//		s.flush();
+//		s.clear();
+//
+//		c1.addInventory( boat, 10, new BigDecimal( 5000 ) );
+//		s.merge( c1 );
+//		s.flush();
+//		s.clear();
+//
+//		Customer c2 = (Customer) s.createQuery( "select c from Customer c" ).uniqueResult();
+//
+//		List<CustomerInventory> inventory = c2.getInventories();
+//
+//		assertEquals( 1, inventory.size() );
+//		assertEquals( 10, inventory.get( 0 ).getQuantity() );
+//
+//		tx.rollback();
+//		s.close();
+//
+//		assertTrue( true );
+//	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+//				Customer.class,
+//				CustomerInventory.class,
+//				Item.class,
+				Simple.class,
+				Simple2.class
+		};
+	}
+}


Property changes on: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/IdClassGeneratedValueTest.java
___________________________________________________________________
Name: svn:executable
   + *

Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/Simple.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/Simple.java	                        (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/Simple.java	2010-01-19 18:50:29 UTC (rev 18582)
@@ -0,0 +1,77 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
+ * indicated by the @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.idclassgeneratedvalue;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * A Simple entity class.
+ *
+ * @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
+ */
+ at Entity
+ at IdClass(SimplePK.class)
+ at SuppressWarnings("serial")
+public class Simple implements Serializable {
+	@Id
+	private Long id1;
+
+	@Id
+	private Long id2;
+
+	private int quantity;
+
+	public Simple() {
+	}
+
+	public Simple(Long id1, Long id2, int quantity) {
+		this.id1 = id1;
+		this.id2 = id2;
+		this.quantity = quantity;
+	}
+
+	public Long getId1() {
+		return id1;
+	}
+
+	public Long getId2() {
+		return id2;
+	}
+
+	public int getQuantity() {
+		return quantity;
+	}
+
+	public void setQuantity(int quantity) {
+		this.quantity = quantity;
+	}
+}

Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/Simple2.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/Simple2.java	                        (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/Simple2.java	2010-01-19 18:50:29 UTC (rev 18582)
@@ -0,0 +1,78 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
+ * indicated by the @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.idclassgeneratedvalue;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * The {@link Simple} entity redone with a generated value {@link #id1} }as part of its
+ * composite pk
+ *
+ * @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
+ */
+ at Entity
+ at IdClass(SimplePK.class)
+ at SuppressWarnings("serial")
+public class Simple2 implements Serializable {
+	@Id
+	@GenericGenerator(name = "increment", strategy = "increment")
+	@GeneratedValue(generator = "increment")
+	private Long id1;
+
+	@Id
+	private Long id2;
+
+	private int quantity;
+
+	public Simple2() {
+	}
+
+	public Simple2(Long id, int quantity) {
+		this.id2 = id;
+		this.quantity = quantity;
+	}
+
+	public Long getId1() {
+		return id1;
+	}
+
+	public Long getId2() {
+		return id2;
+	}
+
+	public int getQuantity() {
+		return quantity;
+	}
+
+	public void setQuantity(int quantity) {
+		this.quantity = quantity;
+	}
+}
\ No newline at end of file

Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/SimplePK.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/SimplePK.java	                        (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/SimplePK.java	2010-01-19 18:50:29 UTC (rev 18582)
@@ -0,0 +1,85 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
+ * indicated by the @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.idclassgeneratedvalue;
+
+import java.io.Serializable;
+
+/**
+ * A SimplePK.
+ *
+ * @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
+ */
+public class SimplePK implements Serializable {
+	private final Long id1;
+	private final Long id2;
+	// AnnotationBinder (incorrectly) requires this to be transient; see HHH-4819 and HHH-4820
+	private final transient int cachedHashCode;
+
+	private SimplePK() {
+		// required by Hibernate, though never used; see HHH-4818
+		id1 = null;
+		id2 = null;
+		cachedHashCode = super.hashCode();
+	}
+
+	public SimplePK(Long id1, Long id2) {
+		this.id1 = id1;
+		this.id2 = id2;
+		this.cachedHashCode = calculateHashCode();
+	}
+
+	private int calculateHashCode() {
+		int result = id1.hashCode();
+		result = 31 * result + id2.hashCode();
+		return result;
+	}
+
+	public Long getId1() {
+		return id1;
+	}
+
+	public Long getId2() {
+		return id2;
+	}
+
+	@Override
+	public boolean equals(Object o) {
+		if ( this == o ) {
+			return true;
+		}
+		if ( o == null || getClass() != o.getClass() ) {
+			return false;
+		}
+
+		SimplePK simplePK = (SimplePK) o;
+
+		return id1.equals( simplePK.id1 )
+				&& id2.equals( simplePK.id2 );
+	}
+
+	@Override
+	public int hashCode() {
+		return cachedHashCode;
+	}
+}



More information about the hibernate-commits mailing list