Fix for #149 - OneToMany with nested ManyToMany deletion bug

This commit is contained in:
Rob Bygrave
2014-06-23 23:34:22 +12:00
parent 8fe1f32e78
commit df526b8f3c
6 changed files with 379 additions and 3 deletions
@@ -0,0 +1,60 @@
package com.avaje.tests.model.m2m;
import java.util.Set;
import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import com.avaje.ebean.annotation.CacheStrategy;
/**
* The Class Permission.
*/
@Entity
@CacheStrategy(readOnly = true)
@Table(name = "mt_permission")
public class Permission {
@Id
private UUID id;
@Column
private String name;
@ManyToMany(mappedBy = "permissions")
private Set<Role> roles;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
@Override
public String toString() {
return "name:" + name + "id:" + id;
}
}
@@ -0,0 +1,81 @@
package com.avaje.tests.model.m2m;
import java.util.Set;
import java.util.UUID;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Version;
/**
* The Class Role.
*/
@Entity
@Table(name = "mt_role")
public class Role {
@Id
private UUID id;
@Column(length = 50)
private String name;
@ManyToMany(cascade = CascadeType.REMOVE)
private Set<Permission> permissions;
@ManyToOne
private Tenant tenant;
@Version
private Long version;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Permission> getPermissions() {
return permissions;
}
public void setPermissions(Set<Permission> permissions) {
this.permissions = permissions;
}
public Long getVersion() {
return version;
}
public void setVersion(Long version) {
this.version = version;
}
public Tenant getTenant() {
return tenant;
}
public void setTenant(Tenant tenant) {
this.tenant = tenant;
}
@Override
public String toString() {
return "name:" + name + " id:" + id + " tenant:" + tenant;
}
}
@@ -0,0 +1,72 @@
package com.avaje.tests.model.m2m;
import java.util.Set;
import java.util.UUID;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Version;
/**
* The Class Tenant.
*/
@Entity
@Table(name = "mt_tenant")
public class Tenant {
@Id
private UUID id;
@Column
private String name;
@OneToMany(mappedBy = "tenant", cascade = CascadeType.REMOVE)
private Set<Role> roles;
@Version
private Long version;
public Tenant() {
}
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getVersion() {
return version;
}
public void setVersion(Long version) {
this.version = version;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
@Override
public String toString() {
return "name:" + name + " id:" + id;
}
}