0

私は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'

どうすればこの問題を解決できますか?

4

1 に答える 1

0

私のマッピングは間違っていました:

それをマップする正しい方法は、マップ列属性を使用することです:

 @ElementCollection(fetch=FetchType.EAGER)
 @MapKeyColumn(name = "LICENSE_NAME", insertable = false, updatable = false) 
    @CollectionTable
    (
        name="DEVICE_LiCENSE_ATTRIBUTE",
        joinColumns=@JoinColumn(name="DEVICE")
    )
    @MapKeyJoinColumn(name="LICENSE_ATTRIBUTE",nullable=false)
    Map<String,SoftwareLicense> softwareLicenses = new HashMap<String, SoftwareLicense>();

ホーム 誰かの役に立ちます。

于 2012-10-23T19:47:35.977 に答える