我的应用程序中有具有此批注结构的表,并且JpaRepository
用于CRUD操作。
@Entity
@Table(name = "FOO")
public class Foo implements Serializable {
…
}
但是我只需要覆盖@Column
一个orm.xml
或属性文件中的表名(而不是任何其他的属性),而无需更改实际代码。我进行了搜索,但在Spring Data JPA中找不到解决方法。我在这里缺少什么还是不支持吗?
首先,Spring Data不是JPA提供程序,而仅仅是提供包装程序通用持久性操作的“帮助器”库。但是,JPA规范确实提供了一种通过XML映射文件覆盖注释的机制。因此,假设您的提供者(Hibernate,EclipseLink,OpenJPA或其他任何一种)完全实现了JPA规范,那么您应该能够做到这一点。
但是,似乎不能仅覆盖表名:除非将列名映射到默认值,否则据我所知,您需要指定映射文件中的每一列-我认为这有点不方便。
《专业JPA 2:精通Java持久性API》一书指出:
元数据完成属性是实体,映射超类和可嵌入元素上的属性。如果指定,则将忽略指定类以及该类中任何字段或属性上的所有注释,并且仅映射文件中的元数据将被视为该类的元数据集。启用元数据完整功能后,使用XML映射的实体时,我们应用于带注释的实体的规则仍将适用。例如,必须映射标识符,并且必须在实体元素内使用其对应的基数映射指定所有关系。
因此,您将需要在orm.xml中添加如下所示的条目,并根据需要添加其他属性。
<entity-mappings>
<entity class="examples.Foo" metadata-complete="true">
<table name="NEW_FOO"/>
<attributes>
<id name="id"/>
</attributes>
</entity>
</entity-mappings>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句