簡體   English   中英

如何自定義使用Hibernate的hbm2ddl生成的DDL(使用批注)?

[英]How can I customize the DDL generated with Hibernate's hbm2ddl (using annotations)?

這是我想做的:
我正在使用Hibernate(3.3.2)映射我的Ingres 10數據庫。 我的Java實體是在元模型之后生成的,因此我們決定使用注釋來簡化操作。
代碼生成之后,我們要執行的操作是生成DDL指令以創建數據庫,因此我們使用hbm2ddl工具,並且具有類似以下內容:

drop table xxx;
create table xxx ...;

我在這里想念的是多余的SQL語句,例如在表上添加特權,例如:

drop table xxx;
create table xxx ...;
grant xxx on table xxx;

我知道我可以使用稱為數據庫對象的東西來生成這樣的語句,但是我認為它僅適用於XML映射。 你能確認嗎?
如果證實了這一點,您是否認為這樣做的更好解決方案?
非常感謝所有人。

有點晚了,不是最漂亮的解決方案,但這是一個快速且骯臟的bash腳本,可與maven一起運行。 希望它可以幫助其他人解決這個問題。

#!/bin/bash

SQL_FILE=$1
GROUP=$2
COMPILED=$1.tmp
SCHEMA_DROP=$3
if [ "$3" == "" ]; then
    SCHEMA_DROP="true"
fi


mvn hibernate3:hbm2ddl -Dschema.file=$SQL_FILE -Dschema.drop=$SCHEMA_DROP

if [ "$SQL_FILE" == "" ] || [ "$GROUP" == "" ] ; then
    echo "Usage: $0 {SQL_FILE} {GROUP} [DROP_SCHEMA]"
    echo "Where: "
    echo "SQL_FILE: path to sql file relative to the root of the project"
    echo "GROUP: the predefined database group on which to grant access"
    echo "DROP_SCHEMA: true|false per the hbm2ddl 'drop' parameter.  Defaults to true"
    echo "NOTE: In order for this to work properly, the pom configuration of the hibernatetool should be parameterized.  For example:"
    echo '<hbm2ddl outputfilename="../../../${schema.file}" format="true" drop="${schema.drop}" />'
    exit;
fi

echo "" > $COMPILED
GRANT=""
while read line
do
    echo $line >> $COMPILED
    if [[ $line =~ .*create.table.([A-Za-z_-]*) ]]; then
        GRANT="$GRANT\ngrant all on table ${BASH_REMATCH[1]} to group $GROUP;" >> $COMPILED 
    fi
done < $SQL_FILE

echo -e $GRANT >> $COMPILED

mv $COMPILED $SQL_FILE

我喜歡將架構文件放入src目錄中以進行簽入,例如src / main / db / myschema.sql,因此將outputfilename屬性中的dir up值(請參閱用法注釋中的NOTE)。 要從cygwin中的項目根目錄以文件名“ genSchema.sh”運行此腳本:

./genSchema.sh src/main/db/myschema.sql mygroup

regexp和生成的授權行用於PostgreSQL方言。 他們可能需要對其他方言稍作修改。

我不太了解Hibernate(只有NHibernate),也不十分了解這些注釋。 但是我很確定這僅在XML映射文件中可用。

您可能會找到一種組合注釋和XML映射的方法。 如果無法做到這一點,請考慮完全轉換為XML,它通常功能更強大,您可以獲得更多控制權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM