[解決済み] Hibernate JPA シーケンス(非Id)
質問
あるカラムにDBシーケンスを使用することは可能ですか? が識別子でない、あるいは複合識別子の一部でない場合、DBシーケンスを使用することができますか? ?
私はjpaプロバイダとしてhibernateを使用しています。私は、識別子の一部ではないものの、(シーケンスを使用して)生成された値を持ついくつかのカラムを持つテーブルを持っています。
私が欲しいのは、シーケンスを使用してエンティティの新しい値を作成することで、シーケンスのカラムは NOT (主キーの一部)であることです。
@Entity
@Table(name = "MyTable")
public class MyEntity {
//...
@Id //... etc
public Long getId() {
return id;
}
//note NO @Id here! but this doesn't work...
@GeneratedValue(strategy = GenerationType.AUTO, generator = "myGen")
@SequenceGenerator(name = "myGen", sequenceName = "MY_SEQUENCE")
@Column(name = "SEQ_VAL", unique = false, nullable = false, insertable = true, updatable = true)
public Long getMySequencedValue(){
return myVal;
}
}
では、こうすると
em.persist(new MyEntity());
の場合、idは生成されますが
mySequenceVal
プロパティもJPAプロバイダによって生成されます。
物事を明確にするために、私は
ハイバーネート
の値を生成するために
mySequencedValue
プロパティの値を生成します。Hibernateがデータベースから生成された値を処理できることは知っていますが、プロパティの値を生成するのに、トリガーやHibernate自身以外のものを使用したくありません。Hibernateが主キーの値を生成できるのであれば、なぜ単純なプロパティの値を生成できないのでしょうか?
どのように解決するのですか?
この問題に対する答えを探していたところ、偶然にも このリンク
Hibernate/JPAは、非IDプロパティに対して自動的に値を作成することができないようです。そのため
@GeneratedValue
アノテーションは
@Id
を併用することで、自動番号を作成することができます。
は
@GeneratedValue
アノテーションは、データベースがこの値自体を生成していることをHibernateに伝えるだけです。
そのフォーラムで提案された解決策 (または回避策) は、次のような、生成された ID を持つ別のエンティティを作成することです。
エンティティ public class GeneralSequenceNumber { ID @GeneratedValue(...) private Long number; } @Entity public class MyEntity { @Id ... private Long id; @OneToOne(...) private GeneralSequnceNumber myVal; }
関連
-
エラー java.util.NoSuchElementException
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
Javaエラーメッセージがenclosingクラスでない
-
org.glassfish.jersey.servlet.ServletContainer
-
HttpClientがGZIP形式でない場合の対処法
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
[解決済み】JPA JoinColumnとmappedByの比較
-
[解決済み] Spring Boot + JPA : 列名アノテーションの無視
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
Dateが型に解決できない問題を解決する
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
java 例外。Javaツールの初期化
-
テストが見つかりませんでした
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)