Hibernate 多层叠关系方案
我有一个拍卖和一个物品类,它们之间有着多对多的关系Hibernate 多层叠关系方案,hibernate,jpa,many-to-many,cascade,Hibernate,Jpa,Many To Many,Cascade,我有一个拍卖和一个物品类,它们之间有着多对多的关系 public class Auction implements BaseEntity,Comparable<Auction>{ private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "auction_i
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;
}
然后,我将无法将现有项目与新拍卖实例关联,如果我不使用此级联关系,则我将无法使用新拍卖创建新项目
有人能就Spring提供这种灵活性的任何特性提出建议吗 多对多关系可以(也应该)更改为一对多关系。拍卖应该能够包含许多物品,但在许多拍卖中有一件物品是没有意义的;您可能尝试的是在多次拍卖中使用项目名称。例如:
您希望在许多拍卖中使用商品名称“Car”,因为您有许多汽车要出售,但请将每一辆汽车视为一个单独的实体,即商品标识“Car37191”,即黑色梅赛德斯只能在一次拍卖中使用。多对多关系可以(也应该)可以更改为一对多关系。拍卖应该能够包含许多物品,但在许多拍卖中有一件物品是没有意义的;您可能尝试的是在多次拍卖中使用项目名称。例如:
你想在很多拍卖会上拍卖商品名称“Car”,因为你有很多车要卖,但是把每一辆车看作一个单独的实体,商品标识“Car37191”,黑色梅赛德斯只能在一次拍卖会上拍卖。但条件是这样的,我需要我的实体之间的多对多关系,所以我可以有任何解决方案让我同时做这两件事,有时用新拍卖附加现有物品(不像级联),有时用新拍卖创建新物品(像级联方式)。当然。通过静默地实例化。在我的示例中,您将为每次拍卖实例化“Car”,但保留名称“Car”,而不是更具体的名称。然后,每次拍卖都会有一个不同的对象,但因为它有相同的名称,所以没有人会知道。但条件是,我需要实体之间的多对多关系,所以我可以有任何解决方案,让我同时进行这两项工作,有时将现有项目与新拍卖相关联(不像层叠)当然,有时也会用新的拍卖方式(比如级联方式)创建一个新项目。通过静默地实例化。在我的示例中,您将为每次拍卖实例化“Car”,但保留名称“Car”,而不是更具体的名称。然后,每次拍卖都会有一个不同的对象,但因为它有相同的名称,所以没有人会知道。
@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;