Entity Many-to-Many 通過映射表關聯

/**
 * CD實體類,對應表CD。
 * @author William
 */
@Entity
public class CD {

	@Id @GeneratedValue
	private Long id;
	private String title;
	private Float price;
	private String description;
	/**
	 * 多對多關聯ARTIST表。<br/>
	 * mappedBy 說明Artist實體類中必須有一個標註了ManyToMany的字段,並且字段名爲cds。<br/>
	 * CascadeType.PERSIST 說明支持級聯持久化。<br/>
	 */
	@ManyToMany(mappedBy = "cds", cascade = {CascadeType.PERSIST})
	private List<Artist> artists;
	
	// Constructors, setters, getters
}

 

/**
 * 藝術家實體類,對應表ARTIST。
 * @author William
 */
@Entity
public class Artist {

	@Id @GeneratedValue
	private Long id;
	private String firstName;
	private String lastName;
	
	/**
	 * 多對多關聯CD表。<br/>
	 * CascadeType.PERSIST 說明支持級聯持久化。<br/>
	 * joinColumns 是映射表CD_ARTIST中關聯ARTIST.ID的外鍵字段名。<br/>
	 * inverseJoinColumns 是映射表CD_ARTIST中關聯CD.ID的外鍵字段名。<br/>
	 */
	@ManyToMany(cascade = {CascadeType.PERSIST})
	@JoinTable(name = "CD_ARTIST", 
		joinColumns = @JoinColumn(name = "ARTIST_ID"),
		inverseJoinColumns = @JoinColumn(name = "CD_ID"))
	private List<CD> cds;
	
	// Constructors, setters, getters
}

 

CREATE TABLE CD (
	ID BIGINT,
	TITLE VARCHAR(50),
	PRICE FLOAT,
	DESCRIPTION VARCHAR(200),
	PRIMARY KEY (ID)
);

CREATE TABLE ARTIST (
	ID BIGINT,
	FIRSTNAME VARCHAR(50),
	LASTNAME VARCHAR(50),
	PRIMARY KEY (ID)
);

CREATE TABLE CD_ARTIST (
	CD_ID BIGINT,
	ARTIST_ID BIGINT,
	PRIMARY KEY (CD_ID, ARTIST_ID),
	FOREIGN KEY (CD_ID) REFERENCES CD(ID),
	FOREIGN KEY (ARTIST_ID) REFERENCES ARTIST(ID)
);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章