classToTableName&的区别tableName& Hibernate NamingStrategy中的collectionTableName?

时间:2014-09-22 06:40:02

标签: hibernate

我正在使用hibernate注释,我想将类(表)名称更改为“t_xx”。 但我不知道要使用它们中的哪一个(classToTableName& tableName& collectionTableName)。

1 个答案:

答案 0 :(得分:2)

您必须通过扩展DefaultNamingStrategy类来创建自定义命名策略。

以下是对这些方法的解释:

  • classToTableName(java.lang.String):当您使用@Entity声明一个类并且没有任何`@Table(name =“...”)时,将调用此方法以获取名称您的班级名称中的数据库表。

  • collectionTableName(...):当需要连接表时,hibernate将调用此方法。

  • tableName(java.lang.String):当您使用`@Table(name =“table_name”)声明一个实体时,hibernate通过将name属性的值传递给此方法来调用此方法。

如果您尚未声明任何命名策略,则休眠使用DefaultNamingStrategy

所以扩展这个类并覆盖这样的方法:

public String  classToTableName(String className) {
   return "t_"+super.classToTableName(className);
}


public String collectionTableName(String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable,String propertyName) {
   return "t_"+super.collectionTableName(ownerEntity,ownerEntityTable,associatedEntity,associatedEntityTable,propertyName);
}

如果您需要更改tableName(String)注释中name的属性值,可以覆盖@Table