ManyToMany альтернатива каскадных отношений - PullRequest
1 голос
/ 01 марта 2011

У меня есть класс Аукцион и Предмет, имеющий много-много отношений друг с другом.

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;

Тогда я не смогу связать существующий предмет с новым экземпляром аукциона, и если я не буду использовать это каскадное отношение, я не смогу создать новый предмет с новым аукционом.

Может ли кто-нибудь дать какие-либо предложения по любой функции Spring, обеспечивающей такую ​​гибкость?

1 Ответ

1 голос
/ 01 марта 2011

Отношение «многие ко многим» можно (и нужно) менять для отношения «один ко многим».Аукционы должны содержать много предметов, но нет смысла иметь предмет на многих аукционах;то, что вы, вероятно, пытались иметь, было item-name на нескольких аукционах.Пример:

Вам нужно наименование товара"Автомобиль" на многих аукционах, потому что у вас есть много автомобилей для продажи, однако каждый автомобиль рассматривается как отдельный объект, item-identity"Car37191", этот черный Mercedes может быть только на одном аукционе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...