我有下面的实体,它使用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
的复合主键包含DOMAIN
和KEY_NAME
;我无法确定如何在pkColumnName
中指定它们以及它们在pkColumnValue
的{{1}}属性中的相应值。
我尝试了@TableGenerator
,但失败了以下异常
引起:org.apache.openjpa.lib.jdbc.ReportingSQLException:ORA-00904:“DOMAIN,KEY_NAME”:标识符无效 {prepstmnt 9864699从AUX_TABLE WHERE“DOMAIN,KEY_NAME”中选择KEY_VALUE =? FOR UPDATE [params =?]} [code = 904,state = 42000] 在org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:219) 在org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:203) 在org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access $ 700(LoggingConnectionDecorator.java:59) 在org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator $ LoggingConnection $ LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:1118)
pkColumnName = "DOMAIN,KEY_NAME"
的{{3}}没有提及此特定情况。
我正在使用 Open JPA 2.3.0 与 JDK 1.7.0_45
答案 0 :(得分:2)
你做不到。 TableGenerator具有简单的键/值结构。