У меня есть следующие классы в моей модели JPA (геттеры, сеттеры и нерелевантные поля опущены):
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@IdClass(PricePK.class)
public class Price {
@Id
@ManyToOne(optional = false)
private Product product;
@Id
@ManyToOne(optional = false)
private Currency currency;
}
@Embeddable
public class PricePK implements Serializable {
Integer product;
Integer currency;
}
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Currency extends PersistentEntity {
@Id
private Integer ix;
}
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Product extends AutoIdPersistentEntity {
}
@MappedSuperclass
public abstract class AutoIdPersistentEntity extends PersistentEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
}
Я использую цель hbm2ddl плагина hibernate3 Maven для созданияDDL из этих классов.Он генерирует следующее для таблицы, соответствующей Price
классу
create table PRICE (
currency_id int null,
product_id int null,
primary key (currency_id, product_id)
);
. Обратите внимание, что оба значения currency_id
и product_id
могут иметь значение null, что приводит к следующей ошибке при попытке загрузить DDL в SQLСервер
Невозможно определить ограничение PRIMARY KEY для столбца со значением NULL в таблице 'PRICE'
Я не понимаю, почему они имеют значение NULL, поскольку в модели домена они аннотированы@ManyToOne(optional = false)
DDL генерируется с использованием диалекта org.hibernate.dialect.SQLServerDialect
SQL.