4

キャメルケースをアンダースコアに変換するためにEclipseLinkを取得する方法はありますか?

たとえば、class MyEntity=>select * from MY_ENTITY

理想的には、persistence.xml にプロパティとして入れることができる事前にパッケージ化されたものです。

4

1 に答える 1

8

それを行うためにセッションカスタマイザを書くことができます。まず、次のようなクラスを作成します。

public class MySessionCustomizer implements SessionCustomizer {
    @Override
    public void customize(Session session) throws SQLException {
        for (ClassDescriptor descriptor : session.getDescriptors().values()) {
            //Only change the table name for non-embedable entities with no @Table already
            if (!descriptor.getTables().isEmpty() && descriptor.getAlias().equalsIgnoreCase(descriptor.getTableName())) {
                String tableName = convertToUnderscore(descriptor.getTableName());
                descriptor.setTableName(tableName);
                for (IndexDefinition index : descriptor.getTables().get(0).getIndexes()) {
                    index.setTargetTable(tableName);
                }
            }
        }
   }
}

次に、このカスタマイザーを登録する必要があります。次の行を persistence.xml の<properties>セクションに追加します。

<property name="eclipselink.session.customizer" value="foo.bar.MySessionCustomizer" />
于 2013-04-09T19:51:05.543 に答える