映射关系思维导图
清晰思维导图分享地址为:JPA思维导图
1.单向一对一映射
一个实体A与另一个实体B之间存在关系,通过A可以获得B,通过B不能获得A。
1.1.数据库
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `article` (
`articleId` int(11) NOT NULL AUTO_INCREMENT,
`articleName` varchar(255) DEFAULT NULL,
`articleContent` varchar(255) DEFAULT NULL,
PRIMARY KEY (`articleId`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
1.2.实体类
添加文章类和用户类
Article类
@Entity
@Table(name = "article")
public class Article {
@Id
@GeneratedValue
@Column(name = "articleId")
private int article;
@Column
private String articleName;
@Column
private String articleContent;
//省略getter和setter
}
User类
@Entity
//指定表名,指定唯一约束
@Table(name = "user",uniqueConstraints = {@UniqueConstraint(columnNames = {"id","name"})})
public class User {
@Id//指定主键
@GeneratedValue
private int id;
@Column
private String name;
@Column
private String password;
//一对一映射
@OneToOne(optional = true, cascade = CascadeType.ALL)
@JoinColumn(name = "articleId", unique = true)
public Article article;
//省略getter和setter
}
@JoinColumn(name = "articleId", unique = true),articleId是所对应的外键。
1.3.测试
@Test
public void testOneToOneRelevance(){
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("MyJPA");
EntityManager em = entityManagerFactory.createEntityManager();
em.getTransaction().begin();
User user = new User();
user.setName("hz");
Article article = new Article();
article.setAricleName("yx");
user.setArticle(article);
em.persist(user);
em.getTransaction().commit();
em.close();
entityManagerFactory.close();
}
2.单向一对多关系中间表方式实现
2.1.数据库
CREATE TABLE `author` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`authorName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`bookName` varchar(255) DEFA