web-dev-qa-db-ja.com

Hibernate-sequenceは存在しません

春の4.2バージョンを使用して、プロジェクトでhibernateを4から5にアップグレードしようとしました。このアップグレード後、更新メソッドを呼び出したときにスタックトレースで次のエラーが見つかりました。

10:53:32,185 ERROR TableStructure:149 - could not read a hi value
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.hibernate_sequence' doesn't exist 

アノテーション付きの自動インクリメントIDを変更しました

@GeneratedValue(strategy=GenerationType.AUTO) 

それでもエラーは残ります。

79
rParvathi

<prop key="hibernate.id.new_generator_mappings">false</prop>。を設定する必要があります。 link および link を参照してください。

75
rParvathi

また置くことができます:

@GeneratedValue(strategy = GenerationType.IDENTITY)

そして、DateBaseに主キーの増分を管理させます。

AUTO_INCREMENT PRIMARY KEY
110
Kikou

Spring Bootの操作

溶液

以下の文字列を.application.propertiesに入れます

spring.jpa.properties.hibernate.id.new_generator_mappings=false

説明

Hibernate 4.Xでは、この属性のデフォルトはtrueです。

41
RivanMota

これがこのエラーの原因です。

使用しているデータベースがIDを生成する方法を探します。 MySqlまたはHSQSLには、自動的に増分する増分フィールドがあります。 PostgresまたはOracleでは、シーケンステーブルを使用します。シーケンステーブル名を指定しなかったため、hibernate_sequenceという名前のシーケンステーブルを探し、それをデフォルトとして使用します。そのため、おそらくデータベースにそのようなシーケンステーブルがなく、そのエラーが発生します。

21
Vishnu S Kumar

「com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:テーブル 'mylocaldb.hibernate_sequence'が存在しません」という同じエラーが表示されました。

Spring mvc 4.3.7およびhibernateバージョン5.2.9を使用すると、spring Javaベースの構成を使用してアプリケーションが作成されます。次のように、@ Eva Mariamが言及したhibernate.id.new_generator_mappingsプロパティをコードに追加する必要があります。

@Autowired
    @Bean(name = "sessionFactory")
    public SessionFactory getSessionFactory(DataSource dataSource) {

        LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
        sessionBuilder.addProperties(getHibernateProperties());
        sessionBuilder.addAnnotatedClasses(User.class);

        return sessionBuilder.buildSessionFactory();
    }

    private Properties getHibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.show_sql", "true");
        properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
        properties.put("hibernate.id.new_generator_mappings","false");
        return properties;
    }

そしてそれは魅力のように働いた。

14
Rajan Chauhan

参考までに

Hbmファイルを使用してO/Rマッピングを定義している場合。

次のことに注意してください。

Hibernate 5では、-シーケンス名のパラメーター名が変更されました

次の設定はHibernate 4で正常に機能しました。

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

しかしHibernate 5では、同じマッピング設定ファイルが「hibernate_sequence does not exist」エラーを引き起こします。

このエラーを修正するには、パラメータ名must change to:

<generator class="sequence">
    <param name="sequence_name">xxxxxx_seq</param>
</generator>

この問題により、2、3時間無駄になりました。

そしてどういうわけか、それについてドキュメントなしがあるように見えます。

Org.hibernate.id.enhanced.SequenceStyleGeneratorのソースコードを読んで理解する必要があります

12
Li Ying

hibernate 5.xでは、hibernate.cfg.xmlでset hibernate.id.new_generator_mappingsをfalseに追加する必要があります

<session-factory>
    ......
    <property name="show_sql">1</property>
    <property name="hibernate.id.new_generator_mappings">false</property>
     ......
 </session-factory>
5
tekintian

今日のように誰かがこの問題で髪を引き抜いた場合に備えて、変更するまでこのエラーを解決できませんでした

spring.jpa.hibernate.dll-auto=create

spring.jpa.properties.hibernate.hbm2ddl.auto=create
3
JMoney

使用するとき

@GeneratedValue(strategy=GenerationType.AUTO)

または

@GeneratedValueは、上記の短い方法であり、Hibernateは最適な生成戦略の決定を開始します。この場合は、

戦略としてGenerationType.SEQUENCE、それがそれが探している理由です

schemaName.hibernate_sequenceは、シーケンスベースのID生成用のテーブルです。

戦略としてGenerationType.SEQUENCEを使用する場合、次のように@TableGeneratorを指定する必要があります。

     @Id
     @GeneratedValue(strategy = GenerationType.TABLE, generator = "user_table_generator")
     @TableGenerator(name = "user_table_generator",
                table = "user_keys", pkColumnName = "PK_NAME", valueColumnName = "PK_VALUE")
     @Column(name = "USER_ID")
     private long userId;

戦略を設定するとき

@GeneratedValue(strategy = GenerationType.IDENTITY)

hibernateがシーケンステーブルの検索を停止するため、元の問題は解決されます。

3
Kalpa

また置くことができます:

@GeneratedValue(strategy = GenerationType.IDENTITY)

そして、DateBaseに主キーの増分を管理させます。

AUTO_INCREMENT PRIMARY KEY

上記の答えは私を助けました。

私はSpring Bootを使用していますが、これを修正する方法はapplication.propertiesファイルに次の行を追加することです。

spring.jpa.properties.hibernate.id.new_generator_mappings = false    
1
ankur saxena

私の場合、すべての注釈GenerationType.AUTOGenerationType.SEQUENCEに置き換えることで問題が解決しました。

0
wwesantos

PostgresにHibernateシーケンスを追加しました。 PostGres Editorでこのクエリを実行します。

    CREATE SEQUENCE hibernate_sequence
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 2
  CACHE 1;
ALTER TABLE hibernate_sequence
  OWNER TO postgres;

クエリを使用することの長所/短所を見つけますが、助けが必要な人はこれを使用できます。

0
Chinmoy

これは HHH-10876 が原因である可能性がありますが、これは修正されているため、必ず以下に更新してください。

  • Hibernate ORM 5.2.1、
  • Hibernate ORM 5.1.1、
  • Hibernate ORM 5.0.11
0
Vlad Mihalcea