简体   繁体   中英

Running hibernate tool annotation generation without the “catalog” attribute

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.

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.

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM