Running hibernate tool annotation generation witho

2019-06-18 00:52发布

when i run my hibernate tools it reads from the db and create java classes for each tables, and a java class for composite primary keys. that's great.

the problem is this line

@Table(name="tst_feature"
    ,catalog="tstdb"
)

while the table name is required, the "catalog" attribute is not required. sometimes i want to use "tstdb", sometimes i want to use "tstdev"

i thought which db was chosen depends on the jdbc connection url but when i change the jdbc url to point to "tstdev", it is still using "tstdb"

so, i know what must be done, just don't know how its is done my options are

  • suppress the generation of the "catalog" attribute currently i'm doing this manually (not very productive) or i could write a program that parses the java file and remove the attribute manually but i'm hoping i don't have to

OR

  • find a way to tell hibernate to ignore the "catalog" attribute and use the schema that is explicitly specified. i don't know the exact setting i have to change to achive this, or even if the option is available.

3条回答
兄弟一词,经得起流年.
2楼-- · 2019-06-18 01:29

You need to follow 3 steps -

1) In the hibernate.cfg.xml, add this property

hibernate.default_catalog = MyDatabaseName

(as specified in above post)

2) In the hibernate.reveng.xml, add all the table filters like this

table-filter match-name="MyTableName"

(just this, no catalog name here)

3) Regenerate hibernate code

You will not see any catalog name in any of the *.hbm.xml files.

I have used Eclipse Galileo and Hibernate-3.2.4.GA.

查看更多
可以哭但决不认输i
3楼-- · 2019-06-18 01:41

There is a customization to the generation, that will tell what tables to put in what catalog.

You can specify the catalogue manually (in reveng file, <table> element), or programmatically (in your custom ReverseEngineeringStrategy class if I remember well).

Also, I recently had to modify the generation templates.

See the reference documentation :

Sorry, this could get more precise, but I don't have access to my work computer right now.

查看更多
4楼-- · 2019-06-18 01:42

The attribute catalog is a "connection" attribute and should be specified in the "connection" config file hibernate.cfg.xml and NOT in a "data" config file *.hbm.xml.

I generate hibernate code via ant task <hibernatetool> and I put this replace task after regeneration (replace schema-name with your database).

<replace dir='../src' token='catalog="schema-name"' value=''>

So, after generation, attribute catalog has been removed.

This is a workaround, but code generated works in my development a production environment with different schema-name.

查看更多
登录 后发表回答