gpt4 book ai didi

jpa - orm.xml 不会覆盖注释

转载 作者:行者123 更新时间:2023-12-01 04:06:51 25 4
gpt4 key购买 nike

我遇到了一个问题,即 Derby 上的 JPA 将 BLOB 大小默认为 64KB。我可以通过设置 来解决这个问题。 columnDefinition="BLOB(128M)" .但是,这在针对另一个 RDBMS(如 MS SQL)进行集成测试时失败了。我想要做的是使用 orm.xml 设置 columnDefinition。然而,我的尝试是徒劳的,我无法让它发挥作用。似乎没有在 中设置的值orm.xml 正如我所期望的那样覆盖注释。

我使用的是 JPA 1.0,Toplink Essentials 2.1.60。

我对以下实体进行了注释:

package foo;

@Entity
@Table(name = "Attachment")
public class Attachment implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Version
@Column(name = "VERSION")
private Integer version;
@Column(name = "FILE_NAME", nullable = false)
private String name;
@Lob
@Basic
@Column(name = "ATTACHED_FILE", nullable = false)
private byte[] file;
}

持久化文件
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="LAS-OOC" transaction-type="RESOURCE_LOCAL">
<provider>${jpa.provider}</provider>
<!-- this isn't required, i know, but I'm trying everything I can think of -->
<mapping-file>META-INF/orm.xml</mapping-file>
<class>foo.Attachment</class>
<properties>
...
</properties>
</persistence-unit>
</persistence>

orm.xml(位于 META-INF 中)
<?xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" version="1.0">

<persistence-unit-metadata>
<persistence-unit-defaults>
<schema>TEST</schema>
</persistence-unit-defaults>
</persistence-unit-metadata>

<entity class="foo.Attachment" access="FIELD" >
<attributes>
<basic name="file">
<!--
I'm using maven profiles to set the 'jpa.blob.definition' property. I even tried changing the column name.
-->
<column nullable="true" name="ATTACHED_FILE_MODIFIED" column-definition="${jpa.blob.definition}" />
</basic>
</attributes>
</entity>
</entity-mappings>

有趣的是,如果我更改 orm.xml 中的实体类或基本名称属性,它会提示它无效/未找到。所以这告诉我它正在阅读它,但它没有覆盖为 指定的注释。文件 .甚至没有使用默认架构。

orm.xml 不是要覆盖注释吗?这不应该很简单吗?

最佳答案

想通了我的问题。我没有意识到该项目在 test/resources 的 persistence.xml 中也定义了相同的持久性单元名称。所以当我添加

<mapping-file>META-INF/orm.xml</mapping-file>

到那个persistence.xml 文件,它起作用了。所以,是的,toplink 似乎存在一个错误,因为它应该自动选择但没有。我不敢相信我之前没有看到。叹...

关于jpa - orm.xml 不会覆盖注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8750777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com