PlayでHibernate4.1.3(JPA)を使用しています!フレームワーク。データベースはPostgreSQL8.4.2です。スキーマはを使用して生成されhibernate.hbm2ddl.auto="update"
ました。
@Id
短いバージョン:。であるフィールドを持つクラスがあり@GeneratedValue
ます。時々、persist
それを実行すると、null列違反が発生します。なぜですか?
詳細:
データベースに保存したい非常に単純なクラスがあります。これは次のようになります。
@Entity
class MyObject {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long id;
@NotNull
public String email;
public Integer total;
}
私は通常、MyObjectのインスタンスを作成し、 nullのときemail
にtotal
フィールドに値を割り当て、id
を介して保存しEntityManager.persist()
ます。Hibernateは新しいオブジェクトのIDを取得し、それをDBに保存します。
ただし、次のスタックトレースが表示されることがあります。
2012-05-19 00:45:16,335 - [ERROR] - from org.hibernate.engine.jdbc.spi.SqlExceptionHelper [SqlExceptionHelper.java:144] in play-akka.actor.actions-dispatcher-6
ERROR: null value in column "id" violates not-null constraint
2012-05-19 00:45:16,350 - [ERROR] - from application in play-akka.actor.actions-dispatcher-6
! @6ad7j3p8p - Internal server error, for request [POST /method] ->
play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[PersistenceException: org.hibernate.exception.ConstraintViolationException: ERROR: null value in column "id" violates not-null constraint]]
これはどのように可能ですか?どうすれば問題を突き止めることができますか?
Hibernateによって生成された関連するDDLは次のとおりです。
CREATE TABLE myobject (
id bigint NOT NULL,
email character varying(255) NOT NULL,
physical integer
);
CREATE SEQUENCE hibernate_sequence
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE ONLY dailydetailedscore
ADD CONSTRAINT dailydetailedscore_pkey PRIMARY KEY (id);