【MyEcplise hibernate tools】hibernate tools的使用以及错误
1.点击Myecplise右上角
2.点击进入后,在这个区域右键 New 一个新的connection
3.以mySql连接为例子,在这里展示一下,下面这几项必须都要按照要求完全一致,除了架包所在的本地位置之外
4.配置完成可以点击上图的Test Driver,测试是否连接成功。连接成功的界面如下:
5.选择本数据库下的所有数据表或者你自己想要生成实体的数据表,点击反向生成
6.此刻,如果在选择的项目中没有我们想要操作的项目,说明我们的项目此时还不支持hibernate,还不是hibernate项目,那我们需要先回到正常的myEcplise界面下,将我们的项目转成hibernate项目
我们需要指定Hibernate的映射文件还有sessionFactory的包名,因为他们不能被创建在默认的包中,下面的提示很清楚
处理完成之后,我们的项目就支持hibernate了。这个时候我们就可以再进入到
这个界面下面接着进行我们的操作了。
7.我们 连接上我们的数据库,然后,选择所有的数据表,反向生成点击:
然后进入这个界面,我们选择如下:【我们采用注解的形式,就不选择映射文件的方式了】
普通的ID生成就是下面这样,不用修改什么。
如果想要规定主键的生成策略,例如主键生成策略为uuid,则本页面可以如下【如果之前实体已经生成,不用怕,这个可以覆盖生成】:
8.然后回到正常的界面,查看项目结构,发现项目已经正常生成实体了
查看实体中的内容发现:不仅实体,实体与实体之间的关系也都正常的生成【我们是5个数据表,但是这个例子中有两个多对多生成的中间表,hibernate反向工程会自动的将这两个中间表变作ManyToMany的关系存在于实体中!!】
1 package com.it.entity; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 import javax.persistence.CascadeType; 6 import javax.persistence.Column; 7 import javax.persistence.Entity; 8 import javax.persistence.FetchType; 9 import javax.persistence.Id; 10 import javax.persistence.ManyToMany; 11 import javax.persistence.Table; 12 13 /** 14 * Authority entity. @author MyEclipse Persistence Tools 15 */ 16 @Entity 17 @Table(name = "authority", catalog = "testdb") 18 public class Authority implements java.io.Serializable { 19 20 // Fields 21 22 private String authorityId; 23 private String authorityName; 24 private Set<Role> roles = new HashSet<Role>(0); 25 26 // Constructors 27 28 /** default constructor */ 29 public Authority() { 30 } 31 32 /** minimal constructor */ 33 public Authority(String authorityId) { 34 this.authorityId = authorityId; 35 } 36 37 /** full constructor */ 38 public Authority(String authorityId, String authorityName, Set<Role> roles) { 39 this.authorityId = authorityId; 40 this.authorityName = authorityName; 41 this.roles = roles; 42 } 43 44 // Property accessors 45 @Id 46 @Column(name = "authorityId", unique = true, nullable = false, length = 36) 47 public String getAuthorityId() { 48 return this.authorityId; 49 } 50 51 public void setAuthorityId(String authorityId) { 52 this.authorityId = authorityId; 53 } 54 55 @Column(name = "authorityName", length = 50) 56 public String getAuthorityName() { 57 return this.authorityName; 58 } 59 60 public void setAuthorityName(String authorityName) { 61 this.authorityName = authorityName; 62 } 63 64 @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "authorities") 65 public Set<Role> getRoles() { 66 return this.roles; 67 } 68 69 public void setRoles(Set<Role> roles) { 70 this.roles = roles; 71 } 72 73 }
错误1:
The last packet successfully received from the server was 0 milliseconds ago.
解决方法:
检查你的每一项的单词拼写是否有误,然后在URL上添加:?autoReconnect=true
例如下:
错误2:
数据表之间有多对多的关系,然后应该是生成一张中间表就好,但是多生成一张ID表
如下图:
user表和testorder表生成一张中间表score
但是使用hibernate 反向生成tools后生成的实体如下:
多生成了一个ScoreId表
解决方法:
将本张表中的两个主键设置为一个主键 即可解决这个问题:
这样就解决了 会多生成一个ID类的问题