LoggingConnectionDecorator

LoggingConnectionDecorator

我下面有一个实体,该实体使用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十进制(2)NOT NULL,
     CONSTRAINT AUX_TABLE_PK主键(DOMAIN,KEY_NAME)


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

我尝试了pkColumnName = "DOMAIN,KEY_NAME",但由于以下异常而失败


  引起原因:org.apache.openjpa.lib.jdbc.ReportingSQLException:ORA-00904:“ DOMAIN,KEY_NAME”:无效的标识符
   {prepstmnt 9864699从AUX_TABLE中的“ 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)


@TableGeneratorjava docs对此特殊情况没有提及。

我正在将Open JPA 2.3.0与JDK 1.7.0_45一起使用

最佳答案

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

10-01 12:27