gpt4 book ai didi

java - 使用辅助表的复合主键打开 JPA - @TableGenerator

转载 作者:行者123 更新时间:2023-11-30 03:30:16 25 4
gpt4 key购买 nike

我有下面的实体,它使用 TABLE 策略来生成 id,并且工作得很好。

@Entity
@Table(name = "Test_Table")
public class SomeEntity implements Serializable {
private static final long serialVersionUID = 1L;

@TableGenerator(name = "TABLE_GEN", table = "AUX_TABLE", pkColumnName = "KEY_NAME", valueColumnName = "KEY_VALUE", pkColumnValue = "someValue", allocationSize = 10)
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN")
@Column(unique = true, nullable = false, precision = 20)
private long someId;

// few other properties and getter / setter
}

下面是用于获取 id 值的 AUX_TABLE 表结构

DOMAIN varchar2(4) NOT NULL,
KEY_NAME varchar2(100) NOT NULL,
KEY_VALUE decimal(2) NOT NULL,
CONSTRAINT AUX_TABLE_PK PRIMARY KEY (DOMAIN,KEY_NAME)

由于 AUX_TABLE 具有由 DOMAINKEY_NAME 组成的复合主键;我无法弄清楚如何在 pkColumnName 中指定它们以及在 @TableGeneratorpkColumnValue 属性中指定它们各自的值。

我尝试了pkColumnName = "DOMAIN,KEY_NAME",但失败并出现以下异常

Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ORA-00904: "DOMAIN,KEY_NAME": invalid identifier {prepstmnt 9864699 SELECT KEY_VALUE FROM AUX_TABLE WHERE "DOMAIN,KEY_NAME" = ? FOR UPDATE [params=?]} [code=904, state=42000] at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:219) at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:203) at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:59) at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:1118)

java docs for @TableGenerator 没有提及这种特殊情况。

我正在使用 Open JPA 2.3.0JDK 1.7.0_45

最佳答案

你不能。 TableGenerator 有一个简单的键/值结构。

关于java - 使用辅助表的复合主键打开 JPA - @TableGenerator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29206507/

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