【发布时间】:2017-01-21 10:43:34
【问题描述】:
我有两张桌子:
主题表:
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;
cmets 表:
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 作为与 topicId 的外键关系 级联更新和删除
- commentId 作为与 cmets 中的 commentId 的外键关系 级联更新和删除
实际情况是我有一个博客发布网站,用户将在该博客上发表评论,其中每个博客主题都有一个topicId,每个用户评论都有一个commentId,现在我已经根据条件创建了表格:
- 每个博客主题可以有多个 cmets
- 删除博客主题后,该博客主题上的所有 cmets 必须 被删除
- 发布 cmets 的用户以后可以删除或编辑它们
我正在使用带有 spring boot 和 spring jpa
的 mysql实体类:
@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
}
【问题讨论】:
标签: java mysql spring spring-boot spring-data-jpa