0

jparepositories を使用して hyperjaxb3 で生成されたエンティティを保存する Springboot アプリケーションで SqlServer42 ドライバーを使用しています。

PhysicalNamingStrategyStandardImpl.toPhysicalTableName()テーブル名の前に文字列を付けるようにオーバーライドしました。

問題は、テーブル名と列名が 30 文字の制限に切り捨てられることです。最終的に生成される名前の長さは30文字 (プレフィックス + テーブル名) です。

プレフィックスを使用せず、テーブル名がたまたま 30 文字を超えている場合でも、同じものが切り捨てられます。

また、sqlserver で名前を128文字の長さにできることも確認しました。

SqlServer では 30 を超える文字名が許可されているため、この制限を増やす方法はありますか。

編集:生成されたクラスには注釈が付けられます@Table(name = <Truncated_Value>)

4

1 に答える 1

1

Hyperjaxbの作成者はこちら。

HJ3 は、可能な限りデータベース間で互換性のある注釈を生成しようとします。30 文字の切り捨ては Oracle によるものです。

現時点では、デフォルトの命名戦略で「ハードコーディング」されています。これを「簡単に」再構成する方法はありません (つまり、プラグイン構成オプションなどを介して)。唯一のオプションは、独自の命名戦略を作成するか、デフォルトの命名戦略を記録することです。これを行う方法を示すテスト プロジェクトを次に示します。

https://github.com/highsource/hyperjaxb3/tree/master/ejb/tests/custom-naming

org/jvnet/hyperjaxb3/ejb/plugin/custom/applicationContext.xml基本的に、ファイルを使用して「拡張」JARを作成するだけでよいと思います。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <bean name="naming" class="org.jvnet.hyperjaxb3.ejb.strategy.naming.impl.DefaultNaming">
        <property name="reservedNames" ref="reservedNames"/>
        <property name="ignoring" ref="ignoring"/>
        <property name="maxIdentifierLength" value="128"/>
    </bean>

</beans>

次に、この成果物を HJ3 プラグインのクラスパスに追加します。たとえば、Maven では次のようになります。

<build>
    <defaultGoal>test</defaultGoal>
    <plugins>
        <plugin>
            <groupId>org.jvnet.hyperjaxb3</groupId>
            <artifactId>maven-hyperjaxb3-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.jvnet.hyperjaxb3</groupId>
                    <artifactId>hyperjaxb3-ejb-tests-custom-naming-extension</artifactId>
                    <version>${project.version}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

これにより、デフォルトの命名設定が上書きされます。

于 2016-12-02T08:16:28.023 に答える