そのため、私たちのプロジェクトでは PostgreSQL データベースを使用し、データベースの操作には JPA を使用しています。Netbeans 7.1.2 の自動作成機能を使用して、データベースからエンティティを作成しました。
小さな変更の後、主キーの値は次のように記述されます。
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@NotNull
@Column(name = "idwebuser", nullable = false)
private Integer idwebuser;
問題は、アプリケーションが柔軟でないことです。これは、Java アプリを使用する代わりに (SQL または別のツールを使用して) データベースを直接変更すると、生成された値が実際のデータベース ID 値よりも低くなり、実行中にエラーが発生するためです。新しいエンティティの作成。
JPAがデータベースにIDを自動的に生成させ、作成プロセス後に取得できる可能性はありますか? または、より良い解決策は何ですか?ありがとう。
EDIT より具体的には、ユーザーのテーブルがあり、私の問題は、任意のタイプの戦略生成タイプを使用して、JPA がそのジェネレーター ID で指定された新しいエンティティを挿入していることです。新しいエントリを追加して自分でテーブルに変更を加えると、アプリケーションの GeneratedValue が現在の ID よりも低くなり、ID が重複して例外が発生するため、これは間違っています。修正できますか ;)?
答えに関する簡単なメモ PG Admin -> View first 100 Rows を使用し、select を使用する代わりにそこから行を編集したため、私の側から少し嘘がありました。いずれにせよ、このエディターは ID の更新プロセスを何らかの形でスキップすることが判明したため、DB でも適切な INSERT を記述しても、不適切な ID で実行されます! つまり、基本的には、データベースとアプリケーションよりも、使用したエディターの問題でした...
今でもそれを使用して動作します@GeneratedValue(strategy=GenerationType.IDENTITY)