У меня ниже объекта, который использует стратегию TABLE
для генерации идентификатора и работает отлично.
@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
используемая для получения значений id
DOMAIN varchar2 (4) NOT NULL,
KEY_NAME varchar2 (100) NOT NULL,
KEY_VALUE decimal (2) NOT NULL,
CONSTRAINT AUX_TABLE_PK ПЕРВИЧНЫЙ КЛЮЧ (DOMAIN, KEY_NAME)
Поскольку AUX_TABLE
имеет составной первичный ключ, содержащий DOMAIN
и KEY_NAME
; Я не могу понять, как определить их в pkColumnName
и их соответствующее значение в pkColumnValue
атрибут @TableGenerator
.
Я попробовал pkColumnName = "DOMAIN,KEY_NAME"
но это не удалось с последующим исключением
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)
В java-документах для @TableGenerator
нет упоминания об этом конкретном случае.
Я использую Open JPA 2.3.0 с JDK 1.7.0_45
Ты не можешь. TableGenerator имеет простую структуру ключей/значений.