[hibernate-commits] Hibernate SVN: r18557 - core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Jan 14 14:10:50 EST 2010


Author: smarlow at redhat.com
Date: 2010-01-14 14:10:50 -0500 (Thu, 14 Jan 2010)
New Revision: 18557

Modified:
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/Player.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/SoccerTeam.java
Log:
HHH-4725 implement orphanRemoval for OneToOne and HHH-4726 Add support for delete-orphan cascading to one-to-one

Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java	2010-01-14 15:20:50 UTC (rev 18556)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java	2010-01-14 19:10:50 UTC (rev 18557)
@@ -362,6 +362,55 @@
 		s.close();
 	}
 
+	public void testCascadedDeleteOfChildOneToOne() {
+		// create two single player teams (for one versus one match of soccer)
+		// and associate teams with players via the special OneVOne methods.
+		// Clear the Team reference to players, which should orphan the teams.
+		// Orphaning the team should delete the team. 
+
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+
+		SoccerTeam team = new SoccerTeam();
+		team.setName("Shalrie's team");
+		Player player1 = new Player();
+		player1.setName("Shalrie Joseph");
+		team.setOneVonePlayer(player1);
+		player1.setOneVoneTeam(team);
+
+		s.persist(team);
+
+		SoccerTeam team2 = new SoccerTeam();
+		team2.setName("Taylor's team");
+		Player player2 = new Player();
+		player2.setName("Taylor Twellman");
+		team2.setOneVonePlayer(player2);
+		player2.setOneVoneTeam(team2);
+		s.persist(team2);
+		tx.commit();
+
+		tx = s.beginTransaction();
+		s.clear();
+		team2 = (SoccerTeam)s.load(team2.getClass(), team2.getId());
+		team = (SoccerTeam)s.load(team.getClass(), team.getId());
+		int count = ( (Long) s.createQuery( "select count(*) from Player" ).iterate().next() ).intValue();
+		assertEquals("expected count of 2 but got = " + count, count, 2);
+
+		// clear references to players, this should orphan the players which should
+		// in turn trigger orphanRemoval logic.
+		team.setOneVonePlayer(null);
+		team2.setOneVonePlayer(null);
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		count = ( (Long) s.createQuery( "select count(*) from Player" ).iterate().next() ).intValue();
+		assertEquals("expected count of 0 but got = " + count, count, 0);
+		tx.commit();
+		s.close();
+	}
+
 	public void testFilter() throws Exception {
 		Session s;
 		Transaction tx;

Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/Player.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/Player.java	2010-01-14 15:20:50 UTC (rev 18556)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/Player.java	2010-01-14 19:10:50 UTC (rev 18557)
@@ -29,6 +29,7 @@
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
 
 
 @Entity
@@ -38,6 +39,10 @@
 	private String name;
 	private SoccerTeam team;
 
+	// For the world cup of one versus one matches, we have
+	// teams with one player (1v1 team).
+	private SoccerTeam oneVoneTeam;
+
 	@Id
 	@GeneratedValue
 	public int getId() {
@@ -62,4 +67,13 @@
 	public void setTeam(SoccerTeam team) {
 		this.team = team;
 	}
+
+	@OneToOne
+	public SoccerTeam getOneVoneTeam() {
+		return oneVoneTeam;
+	}
+
+	public void setOneVoneTeam(SoccerTeam oneVoneTeam) {
+		this.oneVoneTeam = oneVoneTeam;
+	}
 }
\ No newline at end of file

Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/SoccerTeam.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/SoccerTeam.java	2010-01-14 15:20:50 UTC (rev 18556)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/entity/SoccerTeam.java	2010-01-14 19:10:50 UTC (rev 18557)
@@ -32,17 +32,26 @@
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
 
 @Entity
 public class SoccerTeam {
 	@Id
 	@GeneratedValue
 	private int id;
+
+	String name;
+
 	@OneToMany(mappedBy="team",
 		orphanRemoval=true,
 		cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
 	private Set<Player> players = new HashSet<Player>();
 
+	@OneToOne(mappedBy="oneVoneTeam",
+		orphanRemoval=true,
+		cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
+	private Player oneVonePlayer;
+
 	public int getId() {
 		return id;
 	}
@@ -60,4 +69,20 @@
 		val.setTeam(this);
 	}
 
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Player getOneVonePlayer() {
+		return oneVonePlayer;
+	}
+
+	public void setOneVonePlayer(Player oneVonePlayer) {
+		this.oneVonePlayer = oneVonePlayer;
+	}
+	
 }
\ No newline at end of file



More information about the hibernate-commits mailing list