使用Hibernate在Java实体类上映射MySql无符号BigInt的正确数据类型是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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。
我的建议是检查驱动程序的版本。
以上是关于使用Hibernate在Java实体类上映射MySql无符号BigInt的正确数据类型是什么?的主要内容,如果未能解决你的问题,请参考以下文章
《Java从入门到放弃》入门篇:使用注解的方式配置hibernate映射关系