Hibernate HBM2DDL создает пустое поле для первичного внешнего ключа? - PullRequest
1 голос
/ 01 июня 2011

Я использую hbm2ddl (из hibernate3-maven-plugin 2.2) для создания DDL на основе моих аннотированных сущностей JPA.Обычно это работает нормально, но я недавно представил объект, который использует составной ключ, состоящий из двух внешних ключей, и это вызывает проблему с генерацией DDL.

В частности, сгенерированный DDL указывает, что столбцы первичного ключа имеют значение NULL, и это не должно иметь место в случае столбцов первичного ключа.В результате MSSQL не удается создать ограничения первичного ключа из-за обнуляемости столбца.

Вот сущность

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@IdClass(PricePK.class)
public class Price extends PersistentEntity {

    @Id
    @ManyToOne(optional = false)
    private Product product;

    @Id
    @ManyToOne(optional = false)
    private Currency currency;

    @Column(nullable = false)
    private BigDecimal amount;
    ...etc...
}

Сущность указывает, что она использует PricePK в качестве класса первичного ключаи, что более важно, две сущности ManyToOne, которые составляют первичный ключ, не являются необязательными (что должно означать, что столбцы не равны нулю в DDL).Вот класс PricePK:

@Embeddable
public class PricePK implements Serializable {

    Integer product;

    Integer currency;
    ...etc...
}

DDL, который создается для таблицы цен, выглядит следующим образом - обратите внимание, что оба параметра currency_id и product_id допускают нулевое значение:

create table PRICE (
    version int null,
    amount numeric(19,2) not null,
    currency_id int null,
    product_id int null,
    primary key (currency_id, product_id)
);

Когда я пытаюсьзапустить скрипт в MSSql я получаю следующую (не удивительно) ошибку:

Неудачно: создать таблицу store.PRICE (версия int null, количество числовое (19,2) null, currency_id int null, product_idint null, первичный ключ (currency_id, product_id)) Невозможно определить ограничение PRIMARY KEY для столбца со значением NULL в таблице 'PRICE'.

Любая идея, почему в создаваемом DDL для этих двух значений указывается 'null'столбцы внешнего ключа?

1 Ответ

1 голос
/ 11 сентября 2011

Вы, вероятно, можете обойти проблему, используя некоторый вариант @Column (nullable = false) для полей / получателей PricePK.

...