Я использую 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, который производится указывает «нуль» для этих двух иностранных ключевых столбцов?
Возможно, это связано с сообщенной здесь ошибкой https://hibernate.onjira.com/browse/HHH-1935 –