2012-01-25 125 views
0

我有一個小的示例應用程序,我想在其中實現hibernate級聯效應,其中我有一個人模型和一個信用卡模型。一個人可以有多張信用卡。Hibernate層疊在一對多的映射

這裏是人模式:

import java.io.Serializable; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 

import javax.persistence.Column; 
import javax.persistence.Embedded; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 

/** 
* Represents a person entity 
* 
* @author 
* 
*/ 
@Entity 
@Table(name = "PERSON") 
public class Person implements Serializable { 

private static final long serialVersionUID = -5527566248002296042L; 


public Person() { 

} 
public Person(String furstBame) { 
    this.firstName = furstBame; 
} 

@Id 
@Column(name = "ID") 
@GeneratedValue(strategy=GenerationType.AUTO) 
private Integer id; 

@Column(name = "FIRST_NAME") 
private String firstName; 

@Column(name = "LAST_NAME") 
private String lastName; 

@Column(name = "MONEY") 
private Double money; 

@OneToMany (mappedBy="person") 
private List<CreditCard> creditCards; 

public Integer getId() { 
    return id; 
} 

public void setId(Integer id) { 
    this.id = id; 
} 

public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

public String getLastName() { 
    return lastName; 
} 

public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 

public Double getMoney() { 
    return money; 
} 

public void setMoney(Double money) { 
    this.money = money; 
} 
public List<CreditCard> getCreditCards() { 
    return creditCards; 
} 
public void setCreditCards(List<CreditCard> creditCards) { 
    this.creditCards = creditCards; 
} 
} 

而這裏的信用卡型號:

import java.io.Serializable; 

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; 


/** 
* Represents a credit card entity 
* 
* 
*/ 
@Entity 
@Table(name = "CREDIT_CARD") 
public class CreditCard implements Serializable { 

private static final long serialVersionUID = 5924361831551833717L; 
    public CreditCard() { 
     System.out.println("CreditCard"); 
    } 
@Id 
@Column(name = "ID") 
@GeneratedValue 
private Integer id; 

@Column(name = "TYPE") 
private String type; 

@Column(name = "NUMBER") 
private String number; 

@ManyToOne 
@JoinColumn (name="person_ID") 
private Person person; 

public Integer getId() { 
    return id; 
} 

public void setId(Integer id) { 
    this.id = id; 
} 

public String getType() { 
    return type; 
} 

public void setType(String type) { 
    this.type = type; 
} 

public String getNumber() { 
    return number; 
} 

public void setNumber(String number) { 
    this.number = number; 
} 

public Person getPerson() { 
    return person; 
} 

public void setPerson(Person person) { 
    this.person = person; 
} 


} 

請編輯代碼和任何人請解釋的實際語法在這些情況下添加級聯。我使用註釋而不是XML的東西。

回答

0

您需要使用:

@OneToMany (mappedBy="person" cascade=CascadeType.ALL) 

如果你想要當一個人被刪除,那麼你還需要指定要刪除的個人信用卡:

@OneToMany (mappedBy="person" cascade=CascadeType.ALL, orphanRemoval=true) 
+0

這不是在工作的我案件...我的意思是當我刪除人然後信用卡沒有被刪除... –

+0

保存工作? –

+0

是的,我可以爲一個人添加多個信用卡...但我想刪除信用卡,當我刪除一個人...我需要改變任何服務或道的水平.... –