2016-06-21 27 views
1

私は、CRUD操作を実行するために休止状態を使用しているプロジェクトに取り組んでいます。私はユーザモデルを持っていると私は情報を挿入しようとしているが、維持、このエラーを取得しています(HibernateのOracleはNULLを挿入できません)自動生成されたIDの挿入方法は?

Hibernate: insert into APPUSER (dob, email, firstName, lastName, password) values (?, ?, ?, ?, ?) 
Jun 21, 2016 2:17:07 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
WARN: SQL Error: 1400, SQLState: 23000 
Jun 21, 2016 2:17:07 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
ERROR: ORA-01400: cannot insert NULL into ("MYAPP8785"."APPUSER"."ID") 

ユーザモデルが見えます

よう
@Entity 
@Table(name="APPUSER") 
public class AppUser { 


    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @Email 
    @Size(max = 50) 
    private String email; 

    @Column 
    private String dob; 

    @Column 
    private String firstName; 

    @Column 
    private String lastName; 

    @Column(name = "password", nullable = false) 
    private String password; 
} 

properties.put("hibernate.dialect","org.hibernate.dialect.MySQLDialect"); 
//properties.put("hibernate.current_session_context_class","thread"); 
properties.put("hibernate.hbm2ddl.auto","update"); 
properties.put("hibernate.show_sql","true"); 

よう

Hibernateのプロパティ私は下ですhibernateが自動的に私のIDを生成し、シーケンスを使って挿入する印象

+0

使用しているOracleのバージョンは? –

+0

私はoracleを使用しています11g – user3342812

+0

IDの生成にシーケンスを使用する場合は、アノテーションでそのシーケンスを構成する必要があります(GenerationType.SEQUENCE)。 OracleではID列はサポートされていないため、現在のID生成構成は無効です。 – dunni

答えて

3

一部のエラー:org.hibernate.dialect.Oracle10gDialect(11gの無い特定の方言):

  • は、右の方言を使用してください。
  • は休止状態のためのプリミティブ型を使用していないID(intIntegerを使用していない)IDを生成するための

IDENTITYがためのシーケンスを使用してのように、あなたは別の戦略を使用する必要がありますのみversion 12c

ため、Oracleでサポートされて生成されます例。

マッピングは次のようになります。

@Id 
@SequenceGenerator(name = "generator", sequenceName = "ID_SEQUENCE", allocationSize = 1) 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "generator") 
@Column(name = "ID") 
private Integer id; 
+0

ありがとうthierry :) – user3342812

0

テーブルAPPUSERを作成し、主キーIDに自動インクリメント機能があるようにする必要があります。それを行う方法については、How to create id with AUTO_INCREMENT on Oracle?のリンクに従ってください。それだけで、ハイバーネイトがプライマリキーフィールドに値を挿入することがわかります。

0

私はあなたが使用可能な答えを見つけたことがわかり、私はこの同じ問題を抱えていたし、解決策を探している間、この記事に出くわしたことから、私が働いていたものを含みます私。私はOracle 12cを使用しています。これは12cのみで動作します。解決策はOracle12cDialectに変わることでした。そうでない場合は、単に

@GeneratedValue(strategy = GenerationType.IDENTITY) 

を使用して簡単に処理します。

関連する問題