0

OneToOne 関係を持つ 2 つのエンティティがあります。

@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;
}

2 番目のエンティティは null である可能性があり、最初のエンティティを保存しようとすると、次のようになります。

 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 関係を持つエンティティに必要な別の方法があり、2 番目のエンティティを null 可能にできますか?

4

1 に答える 1

1

これは Hibernate ではなく、データベースの例外です。テーブルに外部キー制約があるようです。

外部キー制約を削除すると機能します。

于 2013-07-03T10:25:10.960 に答える