[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