Java 休眠以避免id

Java 休眠以避免id,java,oracle,hibernate,hibernate-mapping,Java,Oracle,Hibernate,Hibernate Mapping,这是我第一次使用hibernate,所以如果我想寻求简单的建议,请原谅。我目前正在使用xml映射一个类(无注释),我的表上没有id,但有人告诉我,我被迫使用hibernate来使用id,所以,我在表中创建了SMS_MONITORING_ID字段,并将其映射如下: <class name="smsbox.dal.model.SmsMonitoring" table="MST_SMS_MONITORING"> <comment></comment>

这是我第一次使用hibernate,所以如果我想寻求简单的建议,请原谅。
我目前正在使用xml映射一个类(无注释),我的表上没有id,但有人告诉我,我被迫使用hibernate来使用id,所以,我在表中创建了SMS_MONITORING_ID字段,并将其映射如下:

 <class name="smsbox.dal.model.SmsMonitoring" table="MST_SMS_MONITORING">
    <comment></comment>

    <id name="smsMonitoringId" type="long">
        <column name="SMS_MONITORING_ID" />
        <generator class="native" >
            <param name="sequence">ID_SMS_MONITORING</param>
        </generator>

    </id>

ID\U SMS\U监控
我已经在我的oracle数据库上创建了一个序列(ID\u SMS\u监控),我根本不希望hibernate处理该ID,我甚至希望避免在java代码中引用该ID(当我保存对象时)。
我如何才能实现让hibernate忽略分配id的整个过程的愿望

另外,我正在将id(long)映射为Oracle“Number”类型,有什么规则可以避免可能出现的问题(long不适合Number,反之亦然)有人能给我提供一些链接,很好地解释映射类型Hibernate和Oracle DB(我自己没有发现任何有趣的东西)。

谢谢

您可以尝试按以下方式声明id生成器

 <generator class="sequence">
        <param name="sequence">YourSquenceName</param>
      </generator>

你的名字

使用hibernate保存对象时,不必获取/设置Id,只需将Id字段保留为null,hibernate将从序列中获取有效Id。

不幸的是,每个映射的实体都应该映射Id,因为每个关系数据库都需要它


只有在持久化对象时,才会将ID分配给对象,因此需要在Hibernate中使用序列。除此之外,您还需要创建参数多于ID的equals和hashcode函数,因为如果您有两个对象,并且它们的ID为null,并且equals和hashcode函数只使用ID,这两个对象在Hibernate中是相等的,可能是代码中许多问题的根本原因。

如果您参考Hibernate文档:


您将看到标记是可选的。将其未定义等同于将其设置为“已分配”(换句话说,您的应用程序将处理id分配)。

您实际上不需要id,但需要某种类型的键,可能是复合键。如果你想做更新,它当然必须是唯一的。但没有理由让ID是单列或数字。我不同意你的观点,根据hibernate的说法,每个表上都应该有主键,主键总是唯一的,但你说得对,我可以创建任何类型的主键,甚至复合类型的主键。