2012-01-25 87 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

是的,我可以为一个人添加多个信用卡...但我想删除信用卡,当我删除一个人...我需要改变任何服务或道的水平.... –