java - hibernate :hbm2ddl.auto=update 和 autoincrement

标签 java hibernate auto-increment

如果 Table 没有 auto_increment,如果我尝试在 Table 中插入内容,将抛出异常 «org.hibernate.HibernateException: The database returned no natively generated identity value»。 Id 被映射为:

    @Id @GeneratedValue
    private int id;

虽然我有 hbm2ddl.auto=update。不幸的是,它没有通过验证在目标表上设置 AUTO_INCREMENT。我能否在没有 HQL 且没有 native SQL 的情况下更好地实现它?

最佳答案

hbm2ddl 设置与身份无关 GenerationType .

您可以编写自己的 ID/ key 生成器类,让 hibernate 知道您自己的 key 生成器类。然后 hibernate 将从您自己的生成器中获取标识。

一些你可能想看的文章:

http://blog.anorakgirl.co.uk/?p=43

http://www.devx.com/Java/Article/30396/0/page/3

Hibernate ID Generator

生成ID的逻辑,看你的需求。最简单的方法是 max(id)+1,您可以缓存 max(id) 以提高性能。好吧,如果您在集群环境中运行应用程序,则必须注意线程安全问题和缓存同步问题。

顺便说一句,你在玩哪个数据库?

更新

打开http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#mapping-declaration-id ,然后搜索“5.1.2.2.1. Various additional generators”,如果您的应用程序未在集群中运行,请查看并尝试生成类型“increment”。

关于java - hibernate :hbm2ddl.auto=update 和 autoincrement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7793395/

相关文章:

java - 在 appengine 数据存储区上存储和搜索键和值对

hibernate - Spring Data - 不同包中的 hibernate.cfg.xml

java - 如何为每个 INSERT 增加 ID?

php - mysql无限主键自增

java - androidx.appcompat.widget.AppCompatTextView 无法转换为 android.widget.CheckedTextView

java - 使用JSP从本地文件系统读取文件

java - 如何使用 JSONB PostgreSQL 通过 JSON 插入列?

java - Hibernate 在数据库中创建冗余列

java - Hibernate 与 SparkJava 不兼容?

java - 如何让 Morphia 将字段的值设置为函数调用的返回值?