HHH-5280 Add test failing on multiple owners

This commit is contained in:
Emmanuel Bernard 2011-01-14 15:52:43 +01:00
parent af81f187b4
commit 0600527a6b
4 changed files with 148 additions and 0 deletions

View File

@ -0,0 +1,35 @@
package org.hibernate.test.annotations.engine.collection;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OrderColumn;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
/**
* @author Emmanuel Bernard
*/
@Entity
@Table(name = "co_father")
public class Father {
@Id
@GeneratedValue
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
private Integer id;
@OneToMany
@OrderColumn(name = "son_arriv")
@JoinColumn(name = "father_id", nullable = false)
@Cascade({ CascadeType.SAVE_UPDATE })
public List<Son> getOrderedSons() { return orderedSons; }
public void setOrderedSons(List<Son> orderedSons) { this.orderedSons = orderedSons; }
private List<Son> orderedSons = new ArrayList<Son>( );
}

View File

@ -0,0 +1,31 @@
package org.hibernate.test.annotations.engine.collection;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
/**
* @author Emmanuel Bernard
*/
@Entity
@Table(name = "co_mother")
public class Mother {
@Id
@GeneratedValue
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
private Integer id;
@OneToMany(mappedBy = "mother")
@Cascade({ CascadeType.SAVE_UPDATE })
public Set<Son> getSons() { return sons; }
public void setSons(Set<Son> sons) { this.sons = sons; }
private Set<Son> sons = new HashSet<Son>();
}

View File

@ -0,0 +1,31 @@
package org.hibernate.test.annotations.engine.collection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
/**
* @author Emmanuel Bernard
*/
@Entity
@Table(name="co_son")
public class Son {
@Id
@GeneratedValue
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
private Integer id;
@ManyToOne(optional = false) @JoinColumn(name = "father_id", insertable = false, updatable = false, nullable = false)
public Father getFather() { return father; }
public void setFather(Father father) { this.father = father; }
private Father father;
@ManyToOne
public Mother getMother() { return mother; }
public void setMother(Mother mother) { this.mother = mother; }
private Mother mother;
}

View File

@ -0,0 +1,51 @@
package org.hibernate.test.annotations.engine.collection;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.test.annotations.TestCase;
/**
* @author Emmanuel Bernard
*/
public class UnidirCollectionWithMultipleOwnerTest extends TestCase {
public void testUnidirCollectionWithMultipleOwner() throws Exception {
Session s = openSession();
Transaction tx;
tx = s.beginTransaction();
Father father = new Father();
Mother mother = new Mother();
s.save( father );
//s.save( mother );
Son son = new Son();
father.getOrderedSons().add( son );
son.setFather( father );
mother.getSons().add( son );
son.setMother( mother );
s.save( mother );
s.save( father );
tx.commit();
s.clear();
tx = s.beginTransaction();
son = (Son) s.get( Son.class, son.getId() );
s.delete( son );
s.flush();
father = (Father) s.get( Father.class, father.getId() );
mother = (Mother) s.get( Mother.class, mother.getId() );
s.delete( father );
s.delete( mother );
tx.commit();
s.close();
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] {
Father.class,
Mother.class,
Son.class
};
}
}