2011-03-01 80 views
1

我有一个Auction和一个Item类,它们之间具有多对多的关系。ManyToMany级联关系替代方案

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; 
} 

在创建一个新的拍卖,有时我想挑一个现有的项目和准新的拍卖,有时,要创建一个新的项目。

如果我使用如图

@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; 

然后(cascade=CascadeType.ALL)关系,我会无法现有项目与新的拍卖实例相关联,如果我不使用这种级联关系,然后我会无法使用新拍卖创建新项目。

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

回答

1

多对多关系可以(也应该)为一对多关系进行更改。拍卖应该能够包含许多物品,但在许多拍卖中拥有物品是没有意义的;您可能试过的是在多个拍卖中使用商品名称。例如:

你在许多拍卖希望项目名称“汽车”,因为你有很多车卖掉,但觉得每一辆汽车作为一个独立的实体,该项目认同“Car37191”黑色梅赛德斯只能进行一次拍卖。

+0

但条件是这样的,我需要我的实体之间的多对多关系,所以我可以有任何解决方案,让我做两个,有时附加现有的项目与新的拍卖(不同级联),有时创建一个新的与新的拍卖项目(如级联方式)。 – Aakanksha 2011-03-07 13:10:02

+0

当然。通过静静地实例化。在我的例子中,您将为每次拍卖实例化“Car”,但保留“Car”的名称而不是更具体的内容。然后,您在每次拍卖中都会有不同的对象,但由于它具有相同的名称,所以不会有人知道。 – 2011-03-07 14:42:36