Foreign key constraint is incorrectly formed

Im getting this error when I try to create an object (iOS SDK):

FAULT = ‘Server.Processing’ [java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLException: Can’t create table 703E6F9E-255E-1662-FF44-BC268FD5C800.58B99074-026B-AAF0-F.C147F435-097C-3B7B-F.8595E (errno: 150 “Foreign key constraint is incorrectly formed”)] <java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLException: Can’t create table 703E6F9E-255E-1662-FF44-BC268FD5C800.58B99074-026B-AAF0-F.C147F435-097C-3B7B-F.8595E (errno: 150 “Foreign key constraint is incorrectly formed”)>

Any idea what is wrong?

Hi Barry!

Please provide example of your code.

Regards,
Kate.

private func createBLProjectObject(projectObject:CDProjectObject) {
 syncIsRunning = true
 
 // First convert the projectObject
 let blProjectObject = blHelper.convertProjectObject(projectObject)
 
 // Upload the object
 let dataStore = appDelegate.backendless.persistenceService.of(BLProjectObject().ofClass())
 
 dataStore.save(blProjectObject, response: {(response:AnyObject!) -> Void in
 print ("ProjectObject Upload OK: ",response.objectId)
 
 // Update the backendID to the objectId of the Backendless Entity
 self.updateBackendID(projectObject: projectObject, blProjectObject: response as! BLProjectObject)
 
 // Save Core Data
 self.cdHelper.save()
 
 // Upload any customproperties that contain NSData
 self.dataToUpload(projectObject)
 
 }, error: {(fault:Fault!) -> Void in
 print ("Fault! Error Creating BLProjectObject '\(projectObject.name)': ",fault)
 if fault.faultCode == "1000" {
 // ID Not found, remove it so object get created again
 print ("stored backendID was not found in Backendless (objectId), remove it so the object get's recreated")
 projectObject.backendID = nil
 self.cdHelper.save()
 self.uploadFailed(projectObject)
 }
 })
 }

func convertProjectObject(projectObject:CDProjectObject) -> BLProjectObject {
        
        let blProjectObject = BLProjectObject()
        
        blProjectObject.uuid = projectObject.uuid
        blProjectObject.attribute = projectObject.attribute
        blProjectObject.createDate = projectObject.createDate
        blProjectObject.modifyDate = projectObject.modifyDate
        blProjectObject.name = projectObject.name
        blProjectObject.descript = projectObject.descript
        //blProjectObject.permission = projectObject.permission
        blProjectObject.propagation = projectObject.propagation
        blProjectObject.sequence = projectObject.sequence
        blProjectObject.owner = appDelegate.backendless.userService.currentUser
        blProjectObject.objectId = projectObject.backendID
        
        // ParentObjectID
        if let parent = projectObject.parent {
            blProjectObject.parentObjectId = parent.uuid
        }
        
        // ObjectType
        if let objectType = projectObject.objectType {
            blProjectObject.objectType = self.convertObjecType(objectType)
        }
        
        // Custom Properties
        if let customProperties = projectObject.customProperties {
            for customProperty in customProperties {
                if let cp = customProperty as? CDCustomProperty {
                    self.convertCustomProperty(cp,blProjectObject: blProjectObject)
                }
            }
        }
        
        return blProjectObject
    }
    
    func convertObjecType(objectType:CDObjectType) -> BLObjectType {
        let blObjectType = BLObjectType()
        
        blObjectType.key = objectType.key
        blObjectType.descript = objectType.descript
        blObjectType.sectionDescript = objectType.sectionDescript
        blObjectType.sequence = objectType.sequence
        
        return blObjectType
    }
    
    func convertCustomProperty(customProperty:CDCustomProperty, blProjectObject: BLProjectObject) -> BLCustomProperty {
        let blCustomProperty = BLCustomProperty()
        
        blCustomProperty.uuid = customProperty.uuid
        blCustomProperty.key = customProperty.key
        blCustomProperty.type = customProperty.type
        blCustomProperty.name = customProperty.name
        blCustomProperty.sequence = customProperty.sequence
        blCustomProperty.stringProperty = customProperty.stringProperty
        blCustomProperty.floatProperty = customProperty.floatProperty
        blCustomProperty.doubleProperty = customProperty.doubleProperty
        blCustomProperty.intProperty = customProperty.intProperty
        blCustomProperty.boolProperty = customProperty.boolProperty
        blCustomProperty.dateProperty = customProperty.dateProperty
        blCustomProperty.objectId = customProperty.backendID
        
        // Relations
        blCustomProperty.projectObject = blProjectObject
        blProjectObject.customProperties.append(blCustomProperty)
        
        // If this is a dataProperty, create a filename pointer based on the key and append .data
        if customProperty.dataProperty != nil {
            blCustomProperty.dataProperty = ("\(customProperty.uuid).data")
        }
        return blCustomProperty
    }

I also cannot browse my data on back endless anymore, getting internal error popup’s in the web interface.

Errors like this: Internal server error with id 5EE49CB4-7C15-3326-FFBA-19C57D446F00

And another one: Internal server error with id 73634E78-6DD1-BF5B-FFE0-6726DD633600

Could you add BLProjectObject and BLObjectType ?

At the moment: No. Getting internal server errors (in the backendless web interface).

When trying via the sdk:

Fault! Error Creating BLProjectObject ‘BMW M1’: FAULT = ‘Server.Processing’ [java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLException: Can’t create table 703E6F9E-255E-1662-FF44-BC268FD5C800.25C18673-F8C6-CCFA-F.C147F435-097C-3B7B-F.55E08 (errno: 150 “Foreign key constraint is incorrectly formed”)] <java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLException: Can’t create table 703E6F9E-255E-1662-FF44-BC268FD5C800.25C18673-F8C6-CCFA-F.C147F435-097C-3B7B-F.55E08 (errno: 150 “Foreign key constraint is incorrectly formed”)>

I understand. But could you add examples of your classes: BLProjectObject, BLObjectType. And CDObjectType, CDCustomProperty, BLCustomProperty?

Ah sorry, misunderstood you :slight_smile:


class BLProjectObject: NSObject {
    
    // Project Object
    var uuid: String?
    var objectId: String?
    var attribute: NSNumber?
    var createDate: NSDate?
    var descript: String?
    var modifyDate: NSDate?
    var name: String?
    var propagation: NSNumber?
    var tags: String?
    var customProperties: [BLCustomProperty] = []
    var objectType: BLObjectType?
    var parentObjectId: String?
    //var relatedTo: [BLProjectObject] = []
    //var relatedFrom: [BLProjectObject] = []
    var sequence: NSNumber?
    var owner: BackendlessUser?
}



class BLObjectType: NSObject {
    var key: String?
    var descript: String?
    var sectionDescript: String?
    var sequence: NSNumber?
}





class BLCustomProperty: NSObject {


    var uuid: String?
    var objectId: String?
    var key: String?
    var type: NSNumber?
    var name: String?
    var permission: NSNumber?
    var sequence: NSNumber?
    var projectObject: BLProjectObject?
    
    var stringProperty: String?
    var floatProperty: NSNumber?
    var doubleProperty: NSNumber?
    var intProperty: NSNumber?
    var boolProperty: NSNumber?
    var dateProperty: NSDate?
    var dataProperty: NSString? // NSData blob will be converted to NSString filename pointer
}




extension CDProjectObject {


    @NSManaged var attribute: NSNumber
    @NSManaged var backendID: String?
    @NSManaged var backendObjectTypeID: String?
    @NSManaged var backendOwnerID: String?
    @NSManaged var backendParentID: String?
    @NSManaged var createDate: NSDate
    @NSManaged var descript: String?
    @NSManaged var modifyDate: NSDate
    @NSManaged var name: String
    @NSManaged var propagation: NSNumber
    @NSManaged var sequence: NSNumber?
    @NSManaged var tags: String?
    @NSManaged var uuid: String
    @NSManaged var children: NSSet?
    @NSManaged var customProperties: NSSet?
    @NSManaged var objectType: CDObjectType?
    @NSManaged var otherUsers: NSSet?
    @NSManaged var ownerUser: CDUser?
    @NSManaged var parent: CDProjectObject?
    @NSManaged var relatedFrom: NSSet?
    @NSManaged var relatedTo: NSSet?
    @NSManaged var groups: NSSet?


}



extension CDCustomProperty {
    
    @NSManaged var backendID: String?
    @NSManaged var boolProperty: NSNumber?
    @NSManaged var dateProperty: NSDate?
    @NSManaged var doubleProperty: NSNumber?
    @NSManaged var floatProperty: NSNumber?
    @NSManaged var intProperty: NSNumber?
    @NSManaged var uuid: String
    @NSManaged var key: String
    @NSManaged var name: String
    @NSManaged var sequence: NSNumber?
    @NSManaged var stringProperty: String?
    @NSManaged var type: NSNumber
    @NSManaged var dataProperty: CDCustomPropertyData?
    @NSManaged var projectObject: CDProjectObject?
    @NSManaged var synced: NSNumber
}









extension CDObjectType {


    @NSManaged var backendID: String
    @NSManaged var descript: String
    @NSManaged var key: String
    @NSManaged var sectionDescript: String
    @NSManaged var sequence: NSNumber?
    @NSManaged var projectObjects: NSSet?


}


It works again, after the internal server error has been resolved: http://support.backendless.com/t/internal-server-error_3#comment-5056

And one more question:
maybe you remember steps before you receive such errors? Maybe some preconditions?

I haven’t been able to reproduce the problem for now. Tried the things I did before getting these errors, but I can’t remember all steps exactly. When the problem occurs again, I’ll report it.