Java hibernate无法将ID分配为double

Java hibernate无法将ID分配为double,java,hibernate,id-generation,Java,Hibernate,Id Generation,我试图用这个xml为hibernate分配双数据类型的ID <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <

我试图用这个xml为hibernate分配双数据类型的ID

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping >
        <class name="User" table="user">
            <id name="id" type="double"  >
                <column name="id_user" />
                <generator class="increment"  />
            </id>
            <property name="username" />
            <property name="password" />
            <property name="email" />

       </class>
    </hibernate-mapping>

我的代码怎么了?或者它是一个Hibernate bug还是什么?

生成ID应该很简单,在不需要的地方使用double作为ID会引入复杂性。Hibernate告诉您不要对ID使用double,而是使用整数类型(或UUID或字符串)。基本上,您希望在比较简单的地方使用一些东西(它们不使用浮点,请参阅如何进行毛茸茸的比较)。使用浮点时,比较整数值最简单,但是如果不希望小数点后面有数字,为什么要使用浮点呢

在映射中选择的类型取决于数据库中使用的类型。如果查看模式,通常id的类型是一个小数位数为零的固定数字(这意味着数字不能有小数部分),因为简单的整数类型可能不足以容纳DBA期望的插入数。由于它是固定十进制的,JDBC将允许将id映射到浮点类型,但这不是您想要的


固定小数和浮点是两种不同的东西。固定小数意味着您有一个固定的位数,其中精度告诉您小数点前有多少位数,比例告诉您小数点后有多少位数。浮点表示使用复杂的二进制表示法来表示数字(有些奇怪的事情发生了,例如某些分数的二进制表示法会导致重复的小数被截断),这比id字段需要的复杂得多。

只对主键使用整数或GUID(字符串也可以使用,但由于它们不能自动生成,您可能不想使用它们)。使用浮点键是一个坏主意,原因有很多,但最重要的是,它是危险的,因为它们不是精确的值。
org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.Double
    at org.hibernate.id.IdentifierGeneratorHelper.getIntegralDataTypeHolder(IdentifierGeneratorHelper.java:210) at org.hibernate.id.IdentifierGeneratorHelper.getIntegralDataTypeHolder(IdentifierGeneratorHelper.java:210)