yohjizzz's Blog

I'm a Programmer.

シーケンスのNEXTVAL値を取得するには?

備忘録.


SAStruts + S2JDBC ならば AbstractService あたりに実装しておけば良いでしょう.

    protected T createSeqNextVal(Class<T> valueClass, String sequenceName) {
        
        if (!(this.jdbcManager instanceof JdbcManagerImplementor)) {
            throw new IllegalClassException(
                JdbcManagerImplementor.class, this.jdbcManager);
        }
        
        DbmsDialect dialect = ((JdbcManagerImplementor)this.jdbcManager).getDialect();
        
        String nextValSql = dialect.getSequenceNextValString(sequenceName, 0);
        
        return this.jdbcManager.selectBySql(valueClass, nextValSql).getSingleResult();
    }


通常の INSERT 時は、
Entity の PK フィールドに @GeneratedValue と @SequenceGenerator をつけておけば自動的に対応してくれますが、
事前にシーケンスの最新値が必要な時はコレ↑で良いでしょう.