/**
* 評論實體類,對應 TCOMMENT 表。
* @author William
*/
@Entity
@Table(name = "TCOMMENT")
public class Comment {
/**
* 標識ID字段爲主鍵,主鍵生成策略爲:自動。
*/
@Id @GeneratedValue
private Long id;
private String nickname;
private String content;
private Integer note;
/**
* 發表日期,對應 posted_date 字段,字段類型爲TIMESTAMP。
*/
@Column(name = "posted_date")
@Temporal(TemporalType.TIMESTAMP)
private Date postedDate;
// Constructors, setters, getters
}
/**
* 新聞實體類,對應 News表。
* @author William
*/
@Entity
@NamedQuery(name = "findAllNews", query = "SELECT n FROM News n")
public class News {
/**
* 標識ID字段爲主鍵,主鍵生成策略爲:自動。
*/
@Id @GeneratedValue
private Long id;
/**
* content新聞內容,該字段必填。
*/
@Column(nullable = false)
private String content;
/**
* comments評論,與之進行一對多關聯。<br/>
* FetchType.EAGER 獲取新聞時立即相關評論。<br/>
* CascadeType.ALL 支持所有級聯操作。<br/>
* OrderBy 獲取評論列表時,按照postedDate(發表日期)降序排列。
*/
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
@JoinTable(name = "NEWS_COMMENT", joinColumns = @JoinColumn(name = "NEWS_ID"),
inverseJoinColumns = @JoinColumn(name = "COMMENT_ID"))
@OrderBy("postedDate DESC")
private List<Comment> comments;
// Constructors, setters, getters
}
CREATE TABLE TCOMMENT (
ID BIGINT,
NICKNAME VARCHAR(50),
CONTENT VARCHAR(500),
NOTE INT,
POSTED_DATE TIMESTAMP,
PRIMARY KEY (ID)
);
CREATE TABLE NEWS (
ID BIGINT,
CONTENT VARCHAR(500),
PRIMARY KEY (ID)
);
CREATE TABLE NEWS_COMMENT (
NEWS_ID BIGINT,
COMMENT_ID BIGINT,
PRIMARY KEY (NEWS_ID, COMMENT_ID),
FOREIGN KEY (NEWS_ID) REFERENCES NEWS(ID),
FOREIGN KEY (COMMENT_ID) REFERENCES TCOMMENT(ID)
);