2011-06-01 5 views
1

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

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

Вот Entity

@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 я получаю следующее (не удивительно) ошибка:

Unsuccessful: create table store.PRICE (version int null, amount numeric(19,2) null, currency_id int null, product_id int null, primary key (currency_id, product_id)) Cannot define PRIMARY KEY constraint on nullable column in table 'PRICE'.

Любая идея, почему DDL, который производится указывает «нуль» для этих двух иностранных ключевых столбцов?

+0

Возможно, это связано с сообщенной здесь ошибкой https://hibernate.onjira.com/browse/HHH-1935 –

ответ

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^