Running hibernate tool annotation generation witho

2019-06-18 00:47发布

问题:

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.

回答1:

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.



回答2:

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 :

  • http://docs.jboss.org/tools/archive/3.0.1.GA/en/hibernatetools/html_single/index.html#hibernaterevengxmlfile you can customize the catalogue of each of your tables manually
  • https://www.hibernate.org/hib_docs/tools/viewlets/custom_reverse_engineering.htm watch a movie that explains a lot ...
  • http://docs.jboss.org/tools/archive/3.0.1.GA/en/hibernatetools/html_single/index.html#d0e5363 for customizing the templates (I start with the directory that's closest to my needs, copy all of them in my own directory, then edit as will)

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



回答3:

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.