Here is a really annoing thing. I can't get cascade to work with ManyToMany.
It my java annotated files below. A User can have many MarketsToLanguages. A MarketToLanguages i a Language, Market and Customer.
Here's some code.
Market
Code:
package se.digitalsupport.ftc.dto;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity()
@Table( name = "Markets" , schema = "FTC" )
@SuppressWarnings( "serial" )
public class Market extends Persistencebase{
@Id
@GeneratedValue
@Column( name = "MarketId" )
@Basic(fetch = FetchType.LAZY)
private Long id;
@Column(
name = "Identifier" ,
length = 255,
unique = true,
nullable = false
)
private String identifier;
@Column(
name = "Name" ,
length = 255,
nullable = false
)
private String name;
public Market(){
}
public Market( String identifier ){
this.identifier = identifier;
}
public Market( String identifier, String name ){
this.identifier = identifier;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getIdentifier() {
return identifier;
}
public void setIdentifier(String identifier) {
this.identifier = identifier;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Language
Code:
package se.digitalsupport.ftc.dto;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity()
@Table( name = "Languages" , schema = "FTC" )
@SuppressWarnings( "serial" )
public class Language extends Persistencebase{
@Id()
@GeneratedValue()
@Column( name = "LanguageId" )
private Long id;
@Column( name = "Identifier", length = 255, nullable = false, unique = true )
private String identifier;
public Language(){
}
public Language( String identifier ){
this.identifier = identifier;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getIdentifier() {
return identifier;
}
public void setIdentifier(String identifier) {
this.identifier = identifier;
}
}
Customer
Code:
package se.digitalsupport.ftc.dto;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/**
* DTO for the Customer class of the Fototext Cental Environent.
* Annotation is used for the Hibernate mapping to reduce hbm mapping files
*
* @author Mathias Nilsson
* @author
[email protected] * @version %I%, %G%
* @since 1.0
*/
@Entity()
@Table( name = "Customers", schema = "FTC" )
@SuppressWarnings( "serial" )
public class Customer extends Persistencebase{
@Id()
@GeneratedValue()
@Column( name = "CustomerId" )
private Long id;
@Column(
name = "Identifier" ,
length = 255,
unique = true,
nullable = false
)
private String name;
@OneToMany( targetEntity= MarketToLanguage.class, cascade = CascadeType.ALL )//fetch = FetchType.EAGER )
@JoinColumn( name = "CustomerId" )
private List<MarketToLanguage> marketsToLanguages = new ArrayList<MarketToLanguage>();
public Customer(){
}
public Customer( String name ){
this.name = name;
}
public Long getId() {
return id;
}
//public void setId(Long id) {
// this.id = id;
//}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<MarketToLanguage> getMarketsToLanguages() {
return marketsToLanguages;
}
public void setMarketsToLanguages(List<MarketToLanguage> marketsToLanguages) {
this.marketsToLanguages = marketsToLanguages;
}
public void addMarketToLanguage( MarketToLanguage marketToLanguage ){
marketToLanguage.setCustomer(this);
this.marketsToLanguages.add(marketToLanguage);
}
}
MarketsToLanguages
Code:
package se.digitalsupport.ftc.dto;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity()
@Table(name = "MarketsToLanguages", schema = "FTC")
@SuppressWarnings( "serial" )
public class MarketToLanguage extends Persistencebase{
@Id
@GeneratedValue
@Column(name = "MarketToLanguageId")
private Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "MarketId")
private Market market;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "CustomerId")
private Customer customer;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "LanguageId")
private Language language;
public MarketToLanguage() {
}
public MarketToLanguage(Market market, Language language) {
this.market = market;
this.language = language;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Market getMarket() {
return market;
}
public void setMarket(Market market) {
this.market = market;
}
public Language getLanguage() {
return language;
}
public void setLanguage(Language language) {
this.language = language;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
Users
Code:
package se.digitalsupport.ftc.dto;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity()
@Table( name = "Users", schema = "FTC" )
@SuppressWarnings( "serial" )
public class User extends Persistencebase{
@Id
@GeneratedValue
@Column( name = "UserId" )
private Long id;
@Column( name = "UserName", length = 255, nullable = false )
private String userName;
@Column( name = "PassWord", length = 255, nullable = false, unique = true )
private String passWord;
@Column( name = "Email", length = 255, nullable = false )
private String email;
@Column( name = "FirstName", length = 255, nullable = false )
private String firstName;
@Column( name = "LastName", length = 255, nullable = false )
private String lastName;
@OneToMany( targetEntity= MarketToLanguage.class, cascade = CascadeType.ALL )
@JoinTable(
name = "UserMapping",
schema = "FTC",
joinColumns = @JoinColumn( name = "UserId" ),
inverseJoinColumns = @JoinColumn( name = "MarketToLanguageId" )
)
private List<MarketToLanguage> marketsToLanguages = new ArrayList<MarketToLanguage>();
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public List<MarketToLanguage> getMarketsToLanguages() {
return marketsToLanguages;
}
public void setMarketsToLanguages(List<MarketToLanguage> marketsToLanguages) {
this.marketsToLanguages = marketsToLanguages;
}
public void addMarketToLanguage( MarketToLanguage marketToLanguage ){
if( this.marketsToLanguages == null){
this.marketsToLanguages = new ArrayList<MarketToLanguage>();
}
if( ! this.marketsToLanguages.contains(marketToLanguage) ){
this.marketsToLanguages.add(marketToLanguage);
}
}
}
In my testcase I add a MarketToLanguage. Then I connect the MarketToLangauge to a User but the addMarketToLanguage() method.
When I try to delete the market the mapping does not cascade. How can this be done?
// Mathias