Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行hibernate工具注释生成而不使用;目录;属性_Java_Hibernate_Code Generation_Annotations - Fatal编程技术网

Java 运行hibernate工具注释生成而不使用;目录;属性

Java 运行hibernate工具注释生成而不使用;目录;属性,java,hibernate,code-generation,annotations,Java,Hibernate,Code Generation,Annotations,当我运行hibernate工具时 它从数据库中读取数据,并为每个表创建java类, 和用于复合主键的java类。 太好了 问题是这条线 @Table(name="tst_feature" ,catalog="tstdb" ) 虽然需要表名,但不需要“catalog”属性。 有时我想用“tstdb”,有时我想用“tstdev” 我认为选择哪个数据库取决于jdbc连接url 但当我将JDBCURL更改为指向“tstdev”时,它仍然使用“tstdb” 所以, 我知道必须做什么, 只是不知道

当我运行hibernate工具时 它从数据库中读取数据,并为每个表创建java类, 和用于复合主键的java类。 太好了

问题是这条线

@Table(name="tst_feature"
    ,catalog="tstdb"
)
虽然需要表名,但不需要“catalog”属性。 有时我想用“tstdb”,有时我想用“tstdev”

我认为选择哪个数据库取决于jdbc连接url 但当我将JDBCURL更改为指向“tstdev”时,它仍然使用“tstdb”

所以, 我知道必须做什么, 只是不知道它是怎么做的 我的选择是

  • 禁止生成“目录”属性 目前我正在手动执行此操作(效率不高) 或者我可以编写一个程序来解析java文件并手动删除属性 但我希望我不必这么做

  • 找到一种方法告诉hibernate忽略“catalog”属性并使用显式指定的模式。 我不知道要实现这一点我必须更改的确切设置,甚至不知道该选项是否可用

这一代有一个定制,它将告诉您要将哪些表放入哪个目录中

您可以手动指定目录(在reveng文件中,
元素),也可以编程方式指定目录(如果我记得很清楚的话,可以在自定义ReverseeEngineeringStrategy类中)

另外,我最近不得不修改生成模板

请参阅参考文档:

  • 您可以手动自定义每个表的目录
  • 看一部解释很多的电影
  • 用于自定义模板(我从最接近我需要的目录开始,将所有模板复制到我自己的目录中,然后根据需要进行编辑)

很抱歉,这可能会更精确,但我现在无法访问我的工作计算机。

您需要遵循3个步骤-

1) 在
hibernate.cfg.xml
中,添加此属性

hibernate.default_catalog = MyDatabaseName
(如上述职位所述)

2) 在
hibernate.reveng.xml
中,像这样添加所有表过滤器

table-filter match-name="MyTableName"
(仅此,此处没有目录名称)

3) 重新生成休眠代码

您将不会在任何
*.hbm.xml
文件中看到任何目录名称


我使用了Eclipse Galileo和Hibernate-3.2.4.GA.

属性目录是一个“连接”属性,应该在“连接”配置文件
Hibernate.cfg.xml
中指定,而不是在“数据”配置文件
*.hbm.xml
中指定

我通过ant任务
生成hibernate代码,并在重新生成后放置此替换任务(用数据库替换模式名称)


因此,生成后,属性目录已被删除


这是一种变通方法,但代码生成在我的开发环境中可以使用不同的模式名工作。

table元素从目录中选择表,是的。但那不是我想要的。我希望生成实体时不使用“catalog”属性如果catalog属性存在,那么无论我的jdbc url是什么,它都会指向同一个模式,我希望能够在不重新生成实体的情况下切换模式。我查看了ftl文件,有一行代码是catalog=“${clazz.table.catalog}”知道如何将其设置为false吗?我用hibernate.cfg.xml文件中的xxx解决了这个问题
<replace dir='../src' token='catalog="schema-name"' value=''>