【问题标题】:Dynamic Naming Table with Hibernate使用 Hibernate 的动态命名表
【发布时间】:2015-05-27 08:18:37
【问题描述】:

是否可以通过hibernate动态设置表名和实体类中提到的带有注释的字段。我发现这是一种叫做命名策略的东西,但我不太理解。 首先,我想知道动态定义表名和字段名的可能解决方案是什么? 其次,谁能给我解释一下ImprovedNamingStrategy类的主要作用,并举一个使用例子。

【问题讨论】:

    标签: java spring hibernate


    【解决方案1】:

    来自“Java Persistence with hibernate” - 您可以扩展ImprovedNamingStrategy 类(实现NamingStrategy 接口并提供默认行为)并覆盖方法

    public String tableName(String tableName) { return "YourTableName"; }

    还有其他方法。 希望这会有所帮助!

    【讨论】:

    • 假设我的数据库中有两个表 myTable1 和 myTable2。我想将 myTable1 映射到 FirstEntity,将 myTable2 映射到 SecondEntity。如何使用改进命名策略做到这一点?
    • 你为什么要使用改进命名策略呢?您可以将@Table(name="myTable1") 注释放在您的实体类中。
    • 事实上,我想将表的名称外部化为实体类应该映射到配置文件中,因为我的应用程序将被许多客户端使用,并且每个客户端都有自己的数据库。因此,要部署应用程序,客户端应该提到与每个实体对应的表的名称这就是为什么我需要外部化指定数据库模式的参数。希望我是具体的。 @Ouney
    • 不确定我是否做对了...但您可以在 hbm.xml 文件中使用占位符(不确定如何使用注释),例如&tableName 然后创建一个文件 tableNames.dtd 并在该 dtd 中分配 tableName 属性值。在你的 hbm.xml dtd 中包含这个 dtd。
    【解决方案2】:

    如果你使用的是 spring ,你可以看看 SpringNamingStrategy 。它已经扩展了 ImprovementNamingStrategy 。如果需要你可以重写 classToTableName 方法。如果你使用的是 spring-boot ,这个类名可以通过属性 spring 外部化.jpa.hibernate.naming-strategy 。 http://docs.spring.io/autorepo/docs/spring-boot/1.1.5.RELEASE/api/org/springframework/boot/orm/jpa/SpringNamingStrategy.html#SpringNamingStrategy()

    希望这会有所帮助。

    【讨论】:

    • 是否可以为每个实体类制定一个命名策略?
    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2015-01-31
    • 2016-06-03
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多