打开 JPA - @TableGenerator 带有用于辅助 table 的复合主键
Open JPA - @TableGenerator with composite primary key for auxiliary table
我有下面的实体,它使用 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
}
下面是 AUX_TABLE
的 table 结构,用于获取 id 值
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
有 复合主键 ,由 DOMAIN
和 KEY_NAME
组成;我无法弄清楚如何在 pkColumnName
中指定它们以及它们在 @TableGenerator
.
的 pkColumnValue
属性中的各自值
我尝试了 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.access0(LoggingConnectionDecorator.java:59)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:1118)
@TableGenerator
的 java docs 没有提到这个特殊情况。
我正在使用 Open JPA 2.3.0 和 JDK 1.7.0_45
你不能。 TableGenerator 有一个简单的 key/value 结构。
我有下面的实体,它使用 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
}
下面是 AUX_TABLE
的 table 结构,用于获取 id 值
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
有 复合主键 ,由 DOMAIN
和 KEY_NAME
组成;我无法弄清楚如何在 pkColumnName
中指定它们以及它们在 @TableGenerator
.
pkColumnValue
属性中的各自值
我尝试了 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.access0(LoggingConnectionDecorator.java:59) at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:1118)
@TableGenerator
的 java docs 没有提到这个特殊情况。
我正在使用 Open JPA 2.3.0 和 JDK 1.7.0_45
你不能。 TableGenerator 有一个简单的 key/value 结构。