2

次のような休止状態の Usertype があります。

public class UUIDHibernateType implements UserType
{
    private static final int[] SQL_TYPES = new int[] { Types.CHAR };

    public int[] sqlTypes ()
    {
        return SQL_TYPES;
    }

    // ...
}

私が抱えている問題は、hibernate が正しくない CHAR(1) 型の SQL スクリプトを生成することです。実際には CHAR(36) が必要です。カスタム タイプのデフォルトの長さを定義するにはどうすればよいですか?

今のところ、次のように sql-type を定義することに固執しています。

<id name="id"
    type="org.openscada.ae.server.storage.jdbc.internal.UUIDHibernateType">
    <column name="ID" length="36" sql-type="CHAR(36)" not-null="true" />
    <generator class="assigned" />
</id>

この場合は問題ありませんが、必要が生じた場合はどうすればよいでしょうか。

PS: UUID を透過的に処理し、データベースに依存しない方法を誰かが知っている場合は、感謝します。

4

3 に答える 3

0

UserType.sqlTypes によって返されるコードは、方言で使用され、登録された型を検索します。したがって、まだ使用されていないコードを sqlTypes が返す場合は、方言をサブクラス化し、そのコードを char(36) として登録できます。例えば:

// カスタム型 public int[] sqlTypes() { return new int[] { 1337 }; }

// カスタムの方言 registerColumnType(1337, "char(36)")

私は試していませんが、Hibernate フォーラムで動作することが報告されています。

于 2010-01-05T17:37:52.287 に答える