2017-01-10 1 views
0

私はIDなしsaveエンティティにしようとすると、SpringのJpaRepositoryが例外をスロー:春JPAがヌル等しいidを持つエンティティを挿入します(自動生成されなければならない)

HibernateはINSERTクエリに idフィールドを含まないようにする方法
MyConfig config = new MyConfig(); 
config.setValue("value"); 
myConfigRepository.save(config); 

org.h2.jdbc.JdbcSQLException: NULL not allowed for column "MY_CONFIG_ID"; SQL statement: 
insert into my_config (value, id) values (?, ?) [23502-190] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 
    at org.h2.message.DbException.get(DbException.java:179) 
    at org.h2.message.DbException.get(DbException.java:155) 
    at org.h2.table.Column.validateConvertUpdateSequence(Column.java:305) 
    at org.h2.table.Table.validateConvertUpdateSequence(Table.java:749) 
    at org.h2.command.dml.Insert.insertRows(Insert.java:151) 
    at org.h2.command.dml.Insert.update(Insert.java:114) 
    at org.h2.command.CommandContainer.update(CommandContainer.java:78) 
    at org.h2.command.Command.executeUpdate(Command.java:253) 
    at org.h2.server.TcpServerThread.process(TcpServerThread.java:345) 
    at org.h2.server.TcpServerThread.run(TcpServerThread.java:159) 
    at java.lang.Thread.run(Thread.java:745) 

私のエンティティ:

@Entity 
public class MyConfig { 

    @Id 
    @SequenceGenerator(sequenceName = "MY_CONFIG_SEQ", name = "MyConfSeq", allocationSize = 1) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MyConfSeq") 
    private Long id; 

    @Column 
    private String value; 

    //getters & setters 

とリポジトリ:

public interface MyConfigRepository extends JpaRepository<MyConfig, Long>, JpaSpecificationExecutor {} 
+1

どこにでもマッピングされた 'MY_CONFIG_ID'列が表示されません。それは' not null'制約付きの特別な(マップされていない)列ではないと確信していますか? – Tobb

+3

'idカラム' @Column(name = "MY_CONFIG_ID")アノテーションを追加するだけです。 –

+0

あなたのDBスキーマを見れば、あなたが知っておくべきこと、 –

答えて

1

MY_CONFIG_IDは、あなたのHibernateマッピングの一部ではありません。

挿入クエリは、フィールドidvalueに挿入されます。次に、entityに記載されていないMY_CONFIG_IDという名前の第3列が存在する必要があります。したがって、nullとして挿入されます。この列にnot nullという制約がある場合、それは失敗します。

あなたのid - カラムがMY_CONFIG_IDという名前にしたい場合は、あなたが必要となるidデフォルトの名前を使用する場合、あなたは、@Column(name="MY_CONFIG_ID")でそれに注釈を付けることにより、(変数と同じid、)デフォルトの列名をovverideする必要があります

関連する問題