0

私はApache DdlUtilsを使用して、テーブルと列のメタデータについて PostgreSQL データベースにクエリを実行しています (最終的な目的は、javax.persistence で注釈が付けられたエンティティ Bean を自動的に生成することです)。ただし、DdlUtilsライブラリは、自動インクリメント列で使用されるシーケンスの名前を取得する方法を提供していないようです。Columnクラスは、自動インクリメント ステータスを照会する isAutoIncrement メソッドを提供します、それに関連付けられたシーケンス名を取得する方法が見つかりませんでした。これは PostgreSQL の DDL の一部です。例:

orders=# \dS customer
                         Table "public.customer"
    Column     |       Type        |                    Modifiers
---------------+-------------------+--------------------------------------------------
 id            | integer           | not null default nextval('cst_id_seq'::regclass)
 name          | character varying | not null
 (...)

その情報を取得する代わりに、メタデータ/カタログテーブルを直接クエリする必要がありますか?

4

1 に答える 1

0

私自身の質問に答える...ええ、ミリムースが示唆したように、 DdlUtilsでは実行できず、information_schema.columnsテーブルにクエリを実行する必要があります:

public String getPostgreSQLSequenceForColumn(String database, String table, String column) {
    try {
        Statement stmt = connection.createStatement();
        String sql="select column_default from information_schema.columns where "+
                   "table_catalog='"+database+"' and "                           +
                   "table_schema='public' and "                                  +
                   "table_name='"+table+"' and "                                 +
                   "column_name='"+column+"'";
        ResultSet rs = stmt.executeQuery(sql);
        rs.next();
        String sequenceName = rs.getString(1);
        panicIf(rs.next());
        return sequenceName;
    } catch (Exception e) {
        throw new ExceptionAdapter(e);
    }
}
于 2012-08-06T08:31:50.150 に答える