DB の方言に依存せず Sequence を実行する機能について #1000
Closed
ironclad-15256304
started this conversation in
Ideas
Replies: 2 comments 2 replies
-
以下のDialectのメソッドでDomaが組み立てているシーケンスのSQLを取得できます。 このSQLを使ってアプリケーションからSQLを発行してはどうでしょうか? |
Beta Was this translation helpful? Give feedback.
1 reply
-
default int nextValue() {
Config config = Config.get(this);
org.seasar.doma.jdbc.Sql<?> sql = config.getDialect().getSequenceNextValSql("MY_SEQUENCE", 0);
try (Connection c = config.getDataSource().getConnection();
Statement s = c.createStatement();
ResultSet r = s.executeQuery(sql.getRawSql())) {
if (r.next()) {
return r.getInt(1);
}
throw new RuntimeException("no value");
} catch (SQLException e) {
throw new RuntimeException(e);
}
} |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
目的:DB の方言に依存せず、 Sequence による連番取得"のみ"を実行したい
相談内容
いつも大変お世話になっております。
私の参加しているプロジェクトでは、 SQL の Sequence 機能を利用し、正確に被りのない連番を必要とする場面がしばしば登場します。
そのようなシチュエーションのために、 Entity のフィールドに
@GeneratedValue
アノテーションを付与することで Insert 実行時に自動で Sequence から ID を作成する機能があるのは承知しております。しかし、データの Insert のタイミングと関係なくシンプルに Sequence のみを実行したい場合があります(設計を見直すべきだとは思いますが、他の方法がないという仮定で進めさせてください)。そのような場合に、 SQL Template を使用して Sequence を実行してもよいのですが、そうすると
@GeneratedValue(strategy = GenerationType.SEQUENCE)
で吸収されているであろう DB の方言等を考慮しなければなりません。それも大した手間ではないとは認識していますが、可能であればそのあたりを意識しないでいいように、 Doma の力をお借りしたいです。上記のような状況において、任意の名称の Sequence を実行し、その値を取得するだけの機能を追加していただくことは可能でしょうか。もしくは、既に何かしらの形で実現が可能なのでしょうか。
お忙しいところ大変恐縮ですが、ご検討頂けますと幸いです。
Beta Was this translation helpful? Give feedback.
All reactions