我的应用程序中有这个注释结构的表,我使用JpaRepository
进行CRUD操作。
@Entity
@Table(name = "FOO")
public class Foo implements Serializable {
…
}
但我需要在不更改实际代码的情况下仅覆盖@Column
或属性文件中的表名(不是任何orm.xml
等属性)。我已经搜索过,而且我无法在Spring Data JPA中找到办法。我在这里遗漏了什么或者不支持吗?
答案 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>