2013-07-03 42 views
0

我有兩個實體與OneToOne關係:可空OneToOne關係真實關係,使用主鍵

@Entity 
@Table(name = "APPLICATION_DEVICE") 
public class ApplicationDevice implements Serializable { 

[...] 

    @Id 
    public ApplicationDeviceKey getApplicationDeviceKey() 
    { 
     return applicationDeviceKey; 
    } 

    @NotFound(action = NotFoundAction.IGNORE) 
@OneToOne(cascade=CascadeType.ALL) 
@JoinColumns({ 
    @JoinColumn(name = "applicationId", referencedColumnName = "applicationId",insertable=false,updatable=false, nullable = true), 
    @JoinColumn(name = "deviceId", referencedColumnName = "deviceId",insertable=false,updatable=false, nullable = true), } 
) 
public ApplicationDevicePushInfo getDevicePushInfo() { 
    return devicePushInfo; 
} 

和其他實體:

@Entity 
@Table(name = "APPLICATION_DEVICE_PUSHINFO") 
public class ApplicationDevicePushInfo implements Serializable { 

[...] 
@Id 
public ApplicationDeviceKey getApplicationDeviceKey() 
{ 
    return applicationDeviceKey; 
} 

@OneToOne 
@JoinColumns({ 
    @JoinColumn(name = "applicationId", referencedColumnName = "applicationId",insertable=false,updatable=false, nullable = false), 
    @JoinColumn(name = "deviceId", referencedColumnName = "deviceId",insertable=false,updatable=false, nullable = false)} 
) 
public ApplicationDevice getApplicationDevice() { 
    return applicationDevice; 
} 

第二實體可以是空的,當我嘗試保存我的第一個實體,我得到一個:

Cannot add or update a child row: a foreign key constraint fails (`malcom_dev`.`application_device`, CONSTRAINT `FK16A0C0451DC7C799` FOREIGN KEY (`applicationId`, `deviceId`) REFERENCES `APPLICATION_DEVICE_PUSHINFO` (`applicationId`, `deviceId`)) 

默認爲空的是真實的,所以我想這將是可能的這種關係。

還有另一種方法可以讓具有oneToOne關係的實體不創建新的列或表,並允許第二個實體爲空?

回答

1

這不是Hibernate,而是數據庫異常。看起來像表上有外鍵約束。

它將在刪除外鍵約束後生效。