【问题标题】:OneToOne relation with nullable to true and relation using primary keysOneToOne 关系与可空到真和使用主键的关系
【发布时间】:2013-07-03 10:20:47
【问题描述】:

我有两个具有 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`))

默认情况下 nullable 为 true,所以我认为这种关系是可能的。

还有另一种方法可以让实体具有 oneToOne 关系而不创建新的列或表,并允许第二个实体为空?

【问题讨论】:

    标签: java hibernate foreign-keys hibernate-mapping one-to-one


    【解决方案1】:

    这不是 Hibernate 而是数据库异常。貌似表有外键约束。

    移除外键约束后即可使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      相关资源
      最近更新 更多