[英]How to create relationship between two tables mysql
我有兩張桌子:
主題表:
CREATE TABLE `topics` (
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
`topicId` varchar(45) NOT NULL,
`title` text NOT NULL,
`details` text,
`dayPosted` varchar(45) DEFAULT NULL,
`username` varchar(45) DEFAULT NULL,
`userImage` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8;
評論表:
CREATE TABLE `comments` (
`commentId` int(11) NOT NULL,
`topicId` varchar(45) NOT NULL,
`comments` text,
`commentDate` varchar(45) DEFAULT NULL,
PRIMARY KEY (`commentId`),
KEY `topicId_idx` (`topicId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
topicId
列在兩個表中都很常見,我想在兩個表之間創建關系。 問題是topicId不是主鍵(雖然我可以使它成為唯一的)
或者我創建第三個表,如topics_comments
,並同時具有:
實際情況是我有博客發布網站,用戶將在該博客上發表評論,其中每個博客主題都有一個topicId
,每個用戶評論都有commentId
,現在我根據條件創建了表:
我正在使用mysql與spring boot和spring jpa
實體類:
@Entity
@Table(name = "topics")
public class TopicBean implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "topicId")
private String topicId;
@Column(name = "title")
private String title;
@Column(name = "details")
private String details;
@Column(name = "username")
private String username;
@Column(name = "userImage")
private String userImage;
@Column(name = "dayPosted")
private String dayPosted;
//Getters and setters
}
您可以堅持使用當前架構,並且仍然可以使用JPA定義工作映射。 這是在當地環境中為我工作的設置(這里只有重要的部分):
主題
@Entity
@Table(name = "topics")
public class Topic implements Serializable {
@Id
@Column(name = "id")
private Integer id;
@Column(name = "topicId")
private Integer topicId;
@OneToMany(mappedBy = "topic", cascade = {CascadeType.REMOVE, CascadeType.MERGE})
private List<Comment> comments;
評論
@Entity
@Table(name = "comments")
public class Comment implements Serializable{
@Id
@Column(name = "commentId")
private Integer commentId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "topicId", referencedColumnName = "topicId")
private Topic topic;
請記住在TOPICS.topicsId上添加唯一索引。
關於鏈接表方案,如果你真的有這樣的話,我會使用它:
加號當然是你正在加入,即使用主鍵,所以決定取決於你。 以下是映射:
主題
@Entity
@Table(name = "topics")
public class Topic implements Serializable {
@Id
@Column(name = "id")
private Integer id;
@ManyToMany
@JoinTable(name="COMMON",
joinColumns=@JoinColumn(name="TOPIC_ID"),
inverseJoinColumns=@JoinColumn(name="COMMENT_ID"))
private List<Comment> comments;
評論
@Entity
@Table(name = "comments")
public class Comment implements Serializable{
@Id
@Column(name = "commentId")
private Integer commentId;
@ManyToMany
@JoinTable(name="COMMON",
joinColumns=@JoinColumn(name="COMMENT_ID"),
inverseJoinColumns=@JoinColumn(name="TOPIC_ID"))
private Topic topic;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.