使用java实体类自动生成Hibernate映射文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用java实体类自动生成Hibernate映射文件相关的知识,希望对你有一定的参考价值。
最近在研究Hibernate。
通过IDE简化可以做到
通过现有的数据库,自动生成映射文件,自动生成实体类;
用过现有的映射文件,自动创建数据库,自动生成实体类。
问题:
如何实现 通过现有实体类,自动生成映射文件;(自动生成数据库)
也就是前面两种的逆向;
1、 创建数据库,创建相应的表,
2、 点击图标,选择MyEclipse Datebase Explorer,
3、 右击空白区域,选择new菜单,根据提示创建数据库连接,创建好后会显示你所创建的连接名,如图mysqldb是我创建的数据库连接,
4、 选择需要添加hibernate映像文件的工程右击--->MyEclipse-->Add Hibernate Capabilities,
5、 根据提示下一步,不需要改动东西,
6、 选择刚刚创建的数据库连接名,继续下一步,最后finish,
7、 刚刚自动生成的东西,有HibernateSessionFactory.java 和 hibernate.cfg.xml,
8、 到MyEclipse Datebase Explorer中刚刚新建的数据库连接选中所有表,点击右键--->Hibernate Reverse Enginnering 选中目录存放将要反转出来的实体类查看是否选中Update Hibernate configuration..若没有自己勾选一下,下一步,可以设置每张表中id增长方式(assigned代表要人为指定,为了方便可以空着让系统决定),及生成的映射文件名称,
注意事项:Class name要指定完整的包名assigned代表要人为指定,为了方便可以空着让系统决定。
9、 回到my eclipse enterprise视图下,所有实体类以及配置文件已生成。 参考技术A Myeclipse 可以通过实体类和映射文件生成数据表 但是貌似不能生成数据库 也就是说你只要创建一下数据库就可以了本回答被提问者采纳 参考技术B 可以做到,网上也有相关资料,不过不推荐这样做。比如关联关系、表结构会有一些奇怪的问题。
了解一下就好。 参考技术C 你可以通过实体和映射文件生成数据库。
使用Hibernate在Java实体类上映射MySql无符号BigInt的正确数据类型是什么?
我正在使用Hibernate将MySql表映射到实体类。启动应用程序,我遇到此表实体映射错误:
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [id] in table [accomodation]; found [bigint (Types#BIGINT)], but expecting [decimal(19,2) (Types#NUMERIC)]
所以我有下表名为accommodation:
Field Type Null Key Default Extra
---------------------------------------------------------------------------------------------------------------------------
id bigint(20) unsigned NO PRI auto_increment
user_id bigint(20) unsigned NO MUL
accomodation_name varchar(255) NO
description text NO
nation varchar(255) NO
region varchar(255) NO
province varchar(255) NO
city varchar(255) NO
geographical_position point NO
stars int(10) NO
accomodation_typological_id bigint(20) unsigned YES
accomodation_service_id bigint(20) unsigned YES
tell varchar(255) YES
mobile varchar(255) YES
fax varchar(255) YES
email varchar(255) YES
time_stamp datetime YES
上一个表由此Accomodation类映射:
@Entity
@Table(name = "accomodation")
public class Accomodation implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private BigInteger id;
//private Integer id;
/*@ManyToOne
private Users users;
*/
@OneToMany(mappedBy = "accomodation")
private List<Room> rooms;
private String name;
private String description;
private String phone;
private String mobile;
private String fax;
private String email;
private Integer stars;
private Double longitude;
private Double latitude;
// CONSTRUCTOR AND GETTER AND SETTER METHODS
...........................................................
...........................................................
...........................................................
}
因此,读取错误似乎在我的住宿表的id字段上存在映射错误,映射在Accomodation类的相关id字段上。
问题似乎是使用BigInteger作为映射类的id字段的类型我必须在表的id字段上使用decimal(19,2)。但我认为它不好,因为表的主键应该是DB上的无符号BigInt。
那么我可以在我的类中使用什么Java数据类型来正确映射这个未签名的BigInt?
正如您在前面的2个代码段中看到的那样
答案
您应该能够将Mysql类型bigint(20)映射到Java原始long,例如:
@Entity
@Table(name = "accomodation")
public class Accomodation implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
但是根据this documentation,您还应该能够使用java.math.BigInteger。
我的建议是检查驱动程序的版本。
以上是关于使用java实体类自动生成Hibernate映射文件的主要内容,如果未能解决你的问题,请参考以下文章