私はHibernateで次のクラスを持っています
@Entity
@Table(name="MODEL")
public class Model {
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
Long id;
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable
(
name="DEVICE_LiCENSE_ATTRIBUTE",
joinColumns=@JoinColumn(name="DEVICE")
)
@MapKeyJoinColumn(name="LICENSE_ATTRIBUTE",nullable=false)
Map<String,SoftwareLicense> softwareLicenses = new HashMap<String, SoftwareLicense>();
}
そして、これは私の組み込みクラスです
@Embeddable
public class SoftwareLicense {
@Column(name = "Type", nullable = false)
@Enumerated(EnumType.STRING)
private Type type;
@Column(name = "VALUE", nullable = false)
private String value;
}
今、Hibernate を実行すると、Table を構築することが true になります
create table DEVICE_LiCENSE_ATTRIBUTE (DEVICE bigint not null, Type varchar(255) not null, VALUE varchar(255) not null, softwareLicenses_KEY varchar(255), primary key (DEVICE, softwareLicenses_KEY))
create table DMS_DEVICE_MODEL (id bigint not null, DESCRIPTION varchar(255) not null, DISPLAYNAME varchar(255) not null, UNIQUENAME varchar(255) not null, primary key (id), unique (UNIQUENAME))
私の問題は、DEVICE_LICENSE_ATTRIBUTE
テーブルの作成時に発生します。
DEVICE_LICENSE_ATTRIBUTE テーブルを見てください:
softwareLicenses_KEY varchar(255)
null 許容であり、Hibernate は null 許容の行に複合主キーを作成しようとします。
primary key (DEVICE, softwareLicenses_KEY)
一部の DB (HSQLDB) では動作しますが、コードを別の環境 (MS SQL 2008) に切り替えるとエラーが発生します。
Cannot define PRIMARY KEY constraint on nullable column in table 'DEVICE_LICENSE_ATTRIBUTE'
どうすればこの問題を解決できますか?