如何在JPA中覆盖注释定义的表名?

时间:2014-12-29 10:29:18

标签: java jpa spring-data-jpa

我的应用程序中有这个注释结构的表,我使用JpaRepository进行CRUD操作。

@Entity
@Table(name = "FOO")
public class Foo implements Serializable {
  …
}

但我需要在不更改实际代码的情况下仅覆盖@Column或属性文件中的表名(不是任何orm.xml等属性)。我已经搜索过,而且我无法在Spring Data JPA中找到办法。我在这里遗漏了什么或者不支持吗?

1 个答案:

答案 0 :(得分:4)

首先,Spring Data不是JPA提供者,而只是一个'helper'库,它提供了一个包装器循环常见的持久性操作。但是,JPA规范确实提供了一种通过XML映射文件覆盖注释的机制。因此,假设您的提供程序(Hibernate,EclipseLink,OpenJPA或其他)完全实现了JPA规范,那么您应该能够这样做。

但是,您似乎不能仅覆盖表名:除非您的列名映射到默认值,否则,我可以看到,您需要指定列中的每一列映射文件 - 我认为这有点不方便。

专业JPA 2:掌握Java Persistence API说明:

  

metadata-complete属性是实体的属性,   mapped-superclass和embeddable元素。如果指定,全部   指定类以及中的任何字段或属性上的注释   该类将被忽略,并且只有映射文件中的元数据   将被视为该类的元数据集。什么时候   启用元数据完成,与我们应用的规则相同   当使用XML映射实体时,带注释的实体仍将适用。   例如,必须映射标识符,并且所有关系都必须   在其中指定相应的基数映射   实体元素。

因此,您需要在orm.xml中输入如下所示的条目,并根据需要添加其他属性。

 <entity-mappings>
    <entity class="examples.Foo" metadata-complete="true">
        <table name="NEW_FOO"/>
        <attributes>
            <id name="id"/>
        </attributes>
    </entity>
</entity-mappings>