Откройте JPA - @TableGenerator с составным первичным ключом для вспомогательной таблицы

1

У меня ниже объекта, который использует стратегию 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

  • 0
    В данной структуре таблицы я не вижу ни одного имени столбца, которое вы пытаетесь использовать в качестве первичного ключа. Убедитесь, что вы определили столбцы с соответствующими именами.
  • 0
    @ViswanathD Теперь я добавил первичный ключ в вопрос ( он уже присутствует в моей БД )
Теги:
jpa
openjpa

1 ответ

2
Лучший ответ

Ты не можешь. TableGenerator имеет простую структуру ключей/значений.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню