hibernate - 为什么 Hibernate 将 BIGINT 映射到 BigInteger

标签 hibernate jpa jdbc

在大多数数据库中,BIGINT 是一个 64 位整数。有谁知道为什么 Hibernate 将这些映射到 BigInteger 而不是 Long?我可以很好地处理这些,但我只是好奇。

您可以在 Dialect.java 中查看此类型的默认映射。我什至发现了一个 hibernate 问题,但没有评论说明为什么会出现这种情况。

https://hibernate.atlassian.net/browse/HHH-7318

我认为这个选择一定是有原因的,但我在谷歌上没有取得任何成功。

另外,子类化我的数据库方言并覆盖它会有什么影响?

谢谢!

最佳答案

很可能是因为 BIGINT s 可以是无符号的( in MySQL at least ,如果不在其他 RDBMS 中)。

唯一可以保存 64 位无符号整数的完整范围的 Java 类型是 BigInteger .使用 long 是不正确的为此,因为这会将 18446744073709551615 (264 - 1) 转换为 -1。

关于hibernate - 为什么 Hibernate 将 BIGINT 映射到 BigInteger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429422/

相关文章:

java - Hibernate StackOverflowError 与 @OneToMany 和 @ManyToOne 映射

java - 获取 org.hibernate.InvalidMappingException : unable to read xml when I try to run my program

java - 为什么在使用 JPA 执行基本 mySQL 搜索时会出现此错误?

eclipse - 在 Eclipse 中哪里修改 JNDI 的 xml?

java - MySQL JDBC 驱动错误

java - 为 InheritanceType.SINGLE_TABLE 的未知 DiscriminatorValue 映射 Hibernate 实体

java - 服务类和 DAO 类在做同样的事情。为什么你需要他们两个?

java - 如何从数据库表生成 hibernate POJO 类

oracle - JPA 悲观锁不起作用

java - ResultSet 的 getString() 方法是否可以用于从 MySQL 表中获取 TEXT 类型列的值?