2012-10-23 1 views
0

I했습니다 다음 최대 절전 모드최대 절전 모드 올바른 매핑지도

@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", 
     [email protected](name="DEVICE") 
    ) 
    @MapKeyJoinColumn(name="LICENSE_ATTRIBUTE",nullable=false) 
    Map<String,SoftwareLicense> softwareLicenses = new HashMap<String, SoftwareLicense>(); 

} 

의 클래스 그리고 내가 표를

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)) 
을 구축 할 trues 최대 절전 모드를 실행할 때이 지금 내 임베디드 클래스

@Embeddable 
public class SoftwareLicense { 

    @Column(name = "Type", nullable = false) 
    @Enumerated(EnumType.STRING) 
    private Type type; 

    @Column(name = "VALUE", nullable = false) 
    private String value; 
} 

입니다

DEVICE_LICENSE_ATTRIBUTE 테이블을 만들 때 내 문제가 발생합니다.

그냥 DEVICE_LICENSE_ATTRIBUTE 테이블에 보면 :

softwareLicenses_KEY varchar(255)는 널 (NULL) 및 최대 절전 모드가 널 (NULL) 행에 복합 기본 키를 만들려고합니다.

primary key (DEVICE, softwareLicenses_KEY) 

일부 DB (HSQLDB)에서 작동하지만 다른 환경 (MS SQL 2008)으로 전환하면 오류가 발생합니다.

Cannot define PRIMARY KEY constraint on nullable column in table 'DEVICE_LICENSE_ATTRIBUTE' 

이 문제를 어떻게 해결할 수 있습니까?

답변

0

내 매핑 잘못 : 그것은 누군가에게 도움이 될 것입니다

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

홈 :

올바른 방법은 맵 항목 속성을 사용하는 것입니다 매핑.