当前位置: 首页 > 知识库问答 >
问题:

Hibernate工具没有用Oracle序列生成POJO?

秦权
2023-03-14
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="patient_sequence")
@SequenceGenerator(name="patient_sequence", sequenceName="PATIENT_SEQ")
@Column(name = "PT_KEY", unique = true, nullable = false, precision = 22, scale = 0)
public Long getPtKey() {
    return this.ptKey;
}
@Id
@Column(name = "PT_KEY", unique = true, nullable = false, precision = 22, scale = 0)
public BigDecimal getPtKey() {
    return this.ptKey;
}
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" >

<hibernate-reverse-engineering>

<schema-selection match-schema="DOC" />

<type-mapping>
    <sql-type jdbc-type="NUMERIC" hibernate-type="java.lang.Long" />
</type-mapping>

<table-filter match-name=".*"></table-filter>
<table name="Patient">
    <primary-key>
        <generator class="org.hibernate.id.SequenceGenerator">
            <param name="sequence">PATIENT_SEQ</param>
        </generator>
        <key-column name="PT_KEY" />
    </primary-key>
   </table>

</hibernate-reverse-engineering>               

共有1个答案

田文景
2023-03-14

一个小小的调整对这两种情况都有效。

将jdbc类型从NUMERIC更改为DECIMAL

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" >
<hibernate-reverse-engineering>
<schema-selection match-schema="DOC" />
<type-mapping>
<sql-type jdbc-type="DECIMAL" hibernate-type="java.lang.Long" />
</type-mapping>
<table-filter match-name=".*"></table-filter>
<table name="Patient">
<primary-key>
    <generator class="sequence">
        <param name="sequence">PATIENT_SEQ</param>
    </generator>
    <key-column name="PT_KEY" />
</primary-key>
</table>
 类似资料:
  • 问题内容: 我正在使用oracle 11g,Java(struts2)和Hibernate开发应用程序。 我有一个名为mytemp的表,其列mytemp_id为NUMBER(22,0)类型。 在我的mytemp.hbm.xml文件中,ID如下所示 在我的Oracle数据库中,创建了名为“ MYTEMP_TEMP_ID_SEQ”的序列,并在Oracle中正常工作。 现在,当我尝试使用hibernat

  • 问题内容: 我有以下映射 SACP表根据 当我尝试保存Sacp实例时,Hibernate抱怨 ORA-01438:此列允许的值大于指定的精度 即使使用Long而不是Integer,也会引发相同的错误 我该怎么解决? 问题答案: 我发现了这个 SEQ_GEN使用名为my_sequence的序列定义序列生成器。此基于序列的hilo算法使用的分配大小为20。请注意,此版本的Hibernate Annot

  • 问题内容: 我是否可以知道Eclipse插件的Hibernate工具可用于生成JPA实体@entity?生成的Java文件如下所示,而不是JPA: 问题答案: 生成时,只需选择EJB3 + Java5作为配置选项。 了解更多信息:http : //docs.jboss.org/tools/4.0.0.Final/zh/hibernatetools/html_single/index.html#jp

  • 问题内容: 我意识到这比Grails更像是一个hibernate的问题。在负载平衡(2个节点)的环境中,我看到对象的ID跳跃了很多。即使没有重新启动应用程序服务器,我也看到数字跳过了10个有时是20个数字。我怀疑hibernate会话正在缓存一个序列值块。 有没有办法通过grails 1.3.7控制此行为? 基本上,我每次服务器都需要从数据库中提取nextval时,我都可以。 我的域对象序列声明(

  • 问题内容: 我的数据库是Oracle,我的id列值是Oracle序列,此序列由触发器执行,因此,在插入每一行之前,此触发器使用此序列来获取id值。因此,我对应该在实体类中定义哪个ID策略生成感到困惑。 要么 要么 真的很困惑,有人可以阐明这个问题吗?请清楚解释。 问题答案: 我还有一个projet,其中有一个Oracle DB将数据提供给我的@Entity类。如您所说,序列通过触发器为表的PK生成

  • 我在尝试将HiberNate与SAP HANA In-Memory数据库连接时遇到了一些性能问题,该数据库不支持AUTO_INCREMENT(http://scn.sap.com/thread/3238906)。 因此,我将HiberNate设置为使用序列生成ID。 但是当我插入大量记录(例如,40000)时,Hibernate首先会生成ID。它看起来像: 只有在生成所有 ID 后,它才会开始实际