ManyToMany级联关系替代方案

时间:2011-03-01 10:19:21

标签: hibernate jpa many-to-many cascade

我有一个Auction和一个Item类,它们之间有很多很多关系。

public class Auction implements BaseEntity,Comparable<Auction>{
private static final long serialVersionUID = 1L;

@Id
@Basic(optional = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "auction_id")
private Long auctionId; 

@Basic(optional = false)
@Column(name = "auction_name")
private String auctionName;

@ManyToMany
@JoinTable(name = "auction_items", joinColumns = {
    @JoinColumn(name = "auction_id", referencedColumnName = "auction_id")}, inverseJoinColumns = {
    @JoinColumn(name = "item_id", referencedColumnName = "item_id")})
private List<Item> itemList;
 .....}

public class Item implements BaseEntity{
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="item_id")
private long itemId;

@Column(name="item_name")
private String itemName;
public class Item implements BaseEntity{
private static final long serialVersionUID = 1L;

@ManyToMany
@JoinTable(name="auction_items",joinColumns={@JoinColumn(name="item_id")},inverseJoinColumns={@JoinColumn(name="auction_id")})
private List<Auction> auctionList;
}

在创建新的拍卖时,有时我想选择现有的项目并与新的拍卖相关联,有时候会创建一个新项目。

如果我使用(cascade=CascadeType.ALL)关系如图所示

@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "auction_items", joinColumns = {
    @JoinColumn(name = "auction_id", referencedColumnName = "auction_id")}, inverseJoinColumns = {
    @JoinColumn(name = "item_id", referencedColumnName = "item_id")})
private List<Item> itemList;

然后,我将无法将现有项目与新的Auction实例关联,如果我不使用此级联关系,那么我将无法使用新的拍卖创建新项目。

有人可以就提供这种灵活性的Spring的任何功能提出建议吗?

1 个答案:

答案 0 :(得分:1)

多对多关系可以(并且应该)针对一对多关系进行更改。拍卖应该能够包含许多项目,但在许多拍卖中有一个项目是没有意义的;您可能尝试过的是在多次拍卖中拥有项目名称。例如:

你想在很多拍卖中使用项目名称“Car”,因为你有很多车要出售,但是把每一辆车都想象成一个单独的实体, item-identity < / strong>“Car37191”,黑色梅赛德斯只能参加一次拍卖。