gpt4 book ai didi

java - 尝试使用 JPA 注释保存具有复合键和基本值的映射

转载 作者:行者123 更新时间:2023-12-01 15:26:55 25 4
gpt4 key购买 nike

我有一个带有 map 的实体。我在 PostgreSQL 上使用 Hibernate。映射中的类是由Java定义的,不能由我注释。我正在修改的类是从我无法更改的 XML 架构生成的。

所以我有

   import java.util.HashMap;
import java.util.Map;
import javax.xml.namespace.QName;

@Entity public class TestClass {
@XmlTransient
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long pk;

...

@XmlAnyAttribute
@ElementCollection(fetch = FetchType.EAGER)
@Embedded
private final Map<QName, String> otherAttributes = new HashMap<QName, String>();

...

我正在使用 PostGreSQL,并且收到以下错误:

Unsuccessful: create table TestClass_otherAttributes (TestClass_pk int8 not null, count int4 not null, hash int4 not null, offset int4 not null, value varchar(255), localPart varchar(255), namespaceURI varchar(255), prefix varchar(255), primary key (TestClass_pk, localPart, namespaceURI, prefix))
ERROR: syntax error at or near "offset" Position: 160

显然,这意味着其中一个字符串中的顺序字段(最有可能在 QName 中,但很难确定)被保留,因此创建表失败。

我对此进行了研究,发现了许多其他注释会影响连接表的构建和命名方式,但没有任何注释允许我引用字段名称(同样,无法注释 QName 或 String)也不会影响不需要在键或值类中进行注释的列名称。

所以我的问题是,要保留此 map ,要添加的注释最少数量是多少?

最佳答案

offset 是 PostgreSQL 和 2008 标准中的保留字:

http://www.postgresql.org/docs/current/interactive/sql-keywords-appendix.html

如果您有权访问 SQL,或者可以控制它的发出方式,则可以将列名放在引号中(双引号字符:["])。带引号的标识符始终被视为标识符,而绝不会与保留字冲突。如果您无法更改列名,也无法引用它,则无法使其在 PostgreSQL 或任何符合 SQL-2008 的数据库产品中工作。

关于java - 尝试使用 JPA 注释保存具有复合键和基本值的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10047600/

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