0

私は JPA アプリケーションを開発しており、Eclipse リンクプロバイダーを使用しています。

フィールド F1 が null ではなく、デフォルト値 ('U') で定義されているテーブル T1 があります。

テーブル T1 にマップされたエンティティを定義しました。エンティティにはフィールド F1 にマップされた属性があり、注釈 @ReturnInsert(returnOnly = true) を使用して属性を構成しました。

ドキュメントには次のように記載されています。

@ReturnInsert を使用して、INSERT 操作が値を書き込み中のオブジェクトに返すようにします。

F1 にマップされた属性に値のないエンティティを永続化すると、すべて正常に動作します。挿入後、エンティティにはデフォルト値が自動的に入力され、データベースにレコードが挿入されます。

しかし、別の値 (デフォルト値なし) でエンティティを永続化しようとすると、レコードがデータベースに挿入されますが、フィールド F1 の値は、エンティティに設定した値である必要があるときにデフォルト値になります。

なぜこれが起こっているのですか?私が望むのは、デフォルト値を変更することだけです。

ありがとう

4

1 に答える 1

0

データベースのフィールドにデフォルト値を設定するために私がしたことは次のとおりです。

  1. データベースのそのフィールドのデフォルト値を定義します
  2. エンティティの対応する属性を読み取り専用にします。

たとえば、日付フィールドの場合、次のようにできます。

DBで:

reg_date    DATE NOT NULL DEFAULT CURRENT_DATE  

エンティティ内:

@Basic(optional=false)
@Temporal(TemporalType.DATE)
@Column(name = "reg_date", insertable= false)
private Date regDate;

これを行うことで、新しいフィールドが挿入されたときにデータベースによって常に自動的に設定されるフィールドを取得しました。

于 2013-11-08T11:27:39.550 に答える