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

猜你喜欢

转载自shuitao-cao.iteye.com/blog/2287424