ObjectBox - 由于UID不匹配而导致的DBException

时间:2017-11-22 10:05:42

标签: android database migration objectbox

我在我的应用程序中使用Objectbox作为ORM,并且由于UID不匹配而获得dbexception,当我在我的一个实体中添加了一些额外的属性时。当我浏览文档时,如果我们在您的实体中添加或删除属性,则对象框将负责更改。但在我的情况下并没有发生这种情况。请查看我的日志存储,实体和default.json一次,让我知道解决此问题的可能解决方案。

ObjectBox版本:v1.2.0

日志

Caused by: io.objectbox.exception.DbException: Incoming entity ID 8:7509306813647547019 does not match existing UID 8172185837942255744
                                                                             at io.objectbox.BoxStore.nativeCreate(Native Method)
                                                                             at io.objectbox.BoxStore.<init>(BoxStore.java:187)
                                                                             at io.objectbox.BoxStoreBuilder.build(BoxStoreBuilder.java:259)
                                                                             at com.letsdogether.dogether.dagger.module.ObjectModule.<init>(ObjectModule.java:34)
                                                                             at com.letsdogether.dogether.newDogetherHome.DogetherApplication.loadObjectsComponent(DogetherApplication.java:104)
                                                                             at com.letsdogether.dogether.newDogetherHome.DogetherApplication.onCreate(DogetherApplication.java:79)
                                                                             at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1018)
                                                                             at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4969)
                                                                             at android.app.ActivityThread.-wrap1(ActivityThread.java) 
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1559) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:111) 
                                                                             at android.os.Looper.loop(Looper.java:207) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5750) 
                                                                             at java.lang.reflect.Method.invoke(Native Method) 
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

实体

以前我的实体看起来像这样:

@Entity
public class BookingItem {

    private long id;
    @Id(assignable = true)
    private long priority;
    private String date;
    private String formattedAddress;
    private String orderId;
    private String type;
    private String title;
    private int seatCount;
    private String pricePerPerson;
    private String time;
    private String day;
    private String redirectUrl;
    private String status;
    private long experienceId;
    private String shareableUrl;
    private ToOne<Image> image;
    private ToOne<FeedElement> feedElementToOne;

}

我的default.json看起来像这样:

{
  "_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.",
  "_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.",
  "_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.",
  "entities": [
    {
      "id": "1:4340630284304338974",
      "lastPropertyId": "8:4962045346664663063",
      "name": "BaseExperience",
      "properties": [
        {
          "id": "1:647607068638902600",
          "name": "id"
        },
        {
          "id": "2:2702040841419862055",
          "name": "actualId"
        },
        {
          "id": "3:3033280429430892352",
          "name": "avgRating"
        },
        {
          "id": "4:7218439493883955972",
          "name": "customerReviewsCount"
        },
        {
          "id": "5:80984715122814807",
          "name": "pricePerPerson"
        },
        {
          "id": "6:3883498391107289246",
          "name": "title"
        },
        {
          "id": "7:8998466498535731699",
          "indexId": "1:1765637542740785127",
          "name": "videoId"
        },
        {
          "id": "8:4962045346664663063",
          "indexId": "2:2040540235098101863",
          "name": "feedToOneId"
        }
      ],
      "relations": []
    },
    {
      "id": "2:7267925106594307597",
      "lastPropertyId": "17:4933883640820962465",
      "name": "BookingItem",
      "properties": [
        {
          "id": "1:2843152350771579539",
          "name": "id"
        },
        {
          "id": "2:3864807135625693365",
          "name": "priority"
        },
        {
          "id": "3:2811475968058126998",
          "name": "date"
        },
        {
          "id": "4:5994267266359962076",
          "name": "formattedAddress"
        },
        {
          "id": "5:8101006061974386478",
          "name": "orderId"
        },
        {
          "id": "6:5927620191588993112",
          "name": "type"
        },
        {
          "id": "7:6885331133485554648",
          "name": "title"
        },
        {
          "id": "8:1499199287986398172",
          "name": "seatCount"
        },
        {
          "id": "9:2504021269483806060",
          "name": "pricePerPerson"
        },
        {
          "id": "10:7281235595111103399",
          "name": "time"
        },
        {
          "id": "11:6617722497399396474",
          "name": "day"
        },
        {
          "id": "12:2473985422221126897",
          "name": "redirectUrl"
        },
        {
          "id": "13:2904830306792476987",
          "name": "status"
        },
        {
          "id": "14:2181195403266779204",
          "name": "experienceId"
        },
        {
          "id": "15:3018070061889416768",
          "name": "shareableUrl"
        },
        {
          "id": "16:6444561946554419063",
          "indexId": "3:1705820361334358507",
          "name": "imageId"
        },
        {
          "id": "17:4933883640820962465",
          "indexId": "4:3744949801364672550",
          "name": "feedElementToOneId"
        }
      ],
      "relations": []
    },
    {
      "id": "3:160108942376228999",
      "lastPropertyId": "6:8550232341754154098",
      "name": "Feed",
      "properties": [
        {
          "id": "1:1692860121377933562",
          "name": "id"
        },
        {
          "id": "2:8854384643059958161",
          "name": "type"
        },
        {
          "id": "3:7664556112391884481",
          "name": "title"
        },
        {
          "id": "4:5817245497381540954",
          "name": "seeAll"
        },
        {
          "id": "5:2317329177962315800",
          "name": "feedType"
        },
        {
          "id": "6:8550232341754154098",
          "indexId": "5:680938987943440350",
          "name": "feedElementToOneId"
        }
      ],
      "relations": []
    },
    {
      "id": "4:7537217652864317597",
      "lastPropertyId": "3:6112954104554042430",
      "name": "FeedElement",
      "properties": [
        {
          "id": "1:4926947771749822767",
          "name": "id"
        },
        {
          "id": "2:8131453946945993591",
          "name": "nextUrl"
        },
        {
          "id": "3:6112954104554042430",
          "name": "feedElementType"
        }
      ],
      "relations": []
    },
    {
      "id": "5:2348793681892920669",
      "lastPropertyId": "8:7488175383318173729",
      "name": "Image",
      "properties": [
        {
          "id": "1:638964174063060815",
          "name": "actualId"
        },
        {
          "id": "2:4967935003726444020",
          "name": "color"
        },
        {
          "id": "3:1353497332618194831",
          "name": "id"
        },
        {
          "id": "4:2887915135519113362",
          "name": "url"
        },
        {
          "id": "5:8827023004110736151",
          "name": "url1080"
        },
        {
          "id": "6:1795038216616196366",
          "name": "url160"
        },
        {
          "id": "7:5076768945024929823",
          "name": "url360"
        },
        {
          "id": "8:7488175383318173729",
          "indexId": "6:4968485658423571275",
          "name": "baseExperienceId"
        }
      ],
      "relations": []
    },
    {
      "id": "6:2806463549017646468",
      "lastPropertyId": "7:1664725566577873631",
      "name": "Location",
      "properties": [
        {
          "id": "1:151476474888340297",
          "name": "id"
        },
        {
          "id": "2:6138069029925290631",
          "name": "city"
        },
        {
          "id": "3:8096792582877437443",
          "name": "formattedAddress"
        },
        {
          "id": "4:8477355478574191642",
          "name": "mapImgUrl"
        },
        {
          "id": "5:5250680748074469313",
          "name": "redirectUrl"
        },
        {
          "id": "6:5264044175718414745",
          "name": "lat"
        },
        {
          "id": "7:1664725566577873631",
          "name": "lng"
        }
      ],
      "relations": []
    },
    {
      "id": "7:1386266048121100599",
      "lastPropertyId": "19:3626459003273476368",
      "name": "User",
      "properties": [
        {
          "id": "1:7194535953200583315",
          "name": "id"
        },
        {
          "id": "2:5880155672016170214",
          "name": "age"
        },
        {
          "id": "3:7058496909689094561",
          "name": "bio"
        },
        {
          "id": "4:7069552521054985458",
          "name": "dob"
        },
        {
          "id": "5:2017478464009051869",
          "name": "education"
        },
        {
          "id": "6:7411668424835907052",
          "name": "email"
        },
        {
          "id": "7:3598420919065748818",
          "name": "fullName"
        },
        {
          "id": "8:55256390599336845",
          "name": "gender"
        },
        {
          "id": "10:4287083418016851024",
          "name": "numberVerified"
        },
        {
          "id": "11:7486368292287445046",
          "name": "phoneNumber"
        },
        {
          "id": "12:332314590071314536",
          "name": "shareableUrl"
        },
        {
          "id": "13:3581159011829058253",
          "name": "showTutorial"
        },
        {
          "id": "14:45244862441869123",
          "name": "username"
        },
        {
          "id": "15:80719230754500568",
          "name": "verified"
        },
        {
          "id": "16:8347557177943880481",
          "name": "work"
        },
        {
          "id": "17:8060185784410064574",
          "indexId": "7:3086777593508744479",
          "name": "locationRelationId"
        },
        {
          "id": "18:7093446540087310685",
          "indexId": "8:4392926741093129871",
          "name": "profilePictureRelationId"
        },
        {
          "id": "19:3626459003273476368",
          "name": "host"
        }
      ],
      "relations": []
    },
    {
      "id": "8:8172185837942255744",
      "lastPropertyId": "4:2905712751785391104",
      "name": "Video",
      "properties": [
        {
          "id": "1:4230636119749821279",
          "name": "id"
        },
        {
          "id": "2:7059360054054181511",
          "name": "nightMode"
        },
        {
          "id": "3:7865268851517989166",
          "name": "thumbnailUrl"
        },
        {
          "id": "4:2905712751785391104",
          "name": "url"
        }
      ],
      "relations": []
    }
  ],
  "lastEntityId": "8:8172185837942255744",
  "lastIndexId": "8:4392926741093129871",
  "lastRelationId": "0:0",
  "lastSequenceId": "0:0",
  "modelVersion": 4,
  "modelVersionParserMinimum": 4,
  "retiredEntityUids": [],
  "retiredIndexUids": [],
  "retiredPropertyUids": [
    5678282376830830494
  ],
  "retiredRelationUids": [],
  "version": 1
}

现在在我的实体中添加了两个新属性后:

@Entity
public class BookingItem {

    //region Variables

    private long id;
    @Id(assignable = true)
    private long priority;
    private String date;
    private String formattedAddress;
    private String orderId;
    private String type;
    private String title;
    private int seatCount;
    private String pricePerPerson;
    private String totalTax; // 1st new propery
    private String totalAmount; // 2nd new property
    private String time;
    private String day;
    private String redirectUrl;
    private String status;
    private long experienceId;
    private String shareableUrl;

    private ToOne<Image> image;
    private ToOne<FeedElement> feedElementToOne;

    //endregion
}

和我的default.json文件:

{
  "_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.",
  "_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.",
  "_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.",
  "entities": [
    {
      "id": "1:797065206246794980",
      "lastPropertyId": "6:5238604438383493820",
      "name": "Feed",
      "properties": [
        {
          "id": "1:4778143127430396941",
          "name": "id"
        },
        {
          "id": "2:2758756424257447876",
          "name": "type"
        },
        {
          "id": "3:8593664445454711775",
          "name": "title"
        },
        {
          "id": "4:3260484052954017714",
          "name": "seeAll"
        },
        {
          "id": "5:5439051893044673734",
          "name": "feedType"
        },
        {
          "id": "6:5238604438383493820",
          "indexId": "1:9094671316112178979",
          "name": "feedElementToOneId"
        }
      ],
      "relations": []
    },
    {
      "id": "2:6365001579184770311",
      "lastPropertyId": "8:4101477603790778141",
      "name": "BaseExperience",
      "properties": [
        {
          "id": "1:22769140630409817",
          "name": "id"
        },
        {
          "id": "2:9018492547283474382",
          "name": "actualId"
        },
        {
          "id": "3:7038610176041110296",
          "name": "avgRating"
        },
        {
          "id": "4:6685630808795149304",
          "name": "customerReviewsCount"
        },
        {
          "id": "5:700371560430014226",
          "name": "pricePerPerson"
        },
        {
          "id": "6:5016151397612468696",
          "name": "title"
        },
        {
          "id": "7:1936717642548225179",
          "indexId": "2:1430584179264421000",
          "name": "videoId"
        },
        {
          "id": "8:4101477603790778141",
          "indexId": "3:2605016395080192788",
          "name": "feedToOneId"
        }
      ],
      "relations": []
    },
    {
      "id": "3:6907123400855664498",
      "lastPropertyId": "7:2458659011456972963",
      "name": "Location",
      "properties": [
        {
          "id": "1:7686305118064424277",
          "name": "id"
        },
        {
          "id": "2:2382662573706119095",
          "name": "city"
        },
        {
          "id": "3:6622007474920998885",
          "name": "formattedAddress"
        },
        {
          "id": "4:4372387463973357662",
          "name": "mapImgUrl"
        },
        {
          "id": "5:4242635850865049170",
          "name": "redirectUrl"
        },
        {
          "id": "6:6362649356171979743",
          "name": "lat"
        },
        {
          "id": "7:2458659011456972963",
          "name": "lng"
        }
      ],
      "relations": []
    },
    {
      "id": "4:1653889744595737127",
      "lastPropertyId": "4:1222058476100793989",
      "name": "Video",
      "properties": [
        {
          "id": "1:8884142329290866772",
          "name": "id"
        },
        {
          "id": "2:9063641434858436120",
          "name": "nightMode"
        },
        {
          "id": "3:6750530027777030938",
          "name": "thumbnailUrl"
        },
        {
          "id": "4:1222058476100793989",
          "name": "url"
        }
      ],
      "relations": []
    },
    {
      "id": "5:2328616238996484251",
      "lastPropertyId": "18:8914368039716260545",
      "name": "User",
      "properties": [
        {
          "id": "1:8699946482619760537",
          "name": "id"
        },
        {
          "id": "2:4839102804066560980",
          "name": "age"
        },
        {
          "id": "3:4125992685805831147",
          "name": "bio"
        },
        {
          "id": "4:1279509102068824378",
          "name": "dob"
        },
        {
          "id": "5:2555427309043212840",
          "name": "education"
        },
        {
          "id": "6:5872521230199756193",
          "name": "email"
        },
        {
          "id": "7:3289121993356321",
          "name": "fullName"
        },
        {
          "id": "8:568408267657413444",
          "name": "gender"
        },
        {
          "id": "9:5476542265369423309",
          "name": "host"
        },
        {
          "id": "10:7787973054527294793",
          "name": "numberVerified"
        },
        {
          "id": "11:7196291790521558535",
          "name": "phoneNumber"
        },
        {
          "id": "12:1859664059288662356",
          "name": "shareableUrl"
        },
        {
          "id": "13:4056506903853763516",
          "name": "showTutorial"
        },
        {
          "id": "14:5747800400884843324",
          "name": "username"
        },
        {
          "id": "15:3715522420100243828",
          "name": "verified"
        },
        {
          "id": "16:3996139181248738872",
          "name": "work"
        },
        {
          "id": "17:3912614163504861034",
          "indexId": "4:724013235730952653",
          "name": "locationRelationId"
        },
        {
          "id": "18:8914368039716260545",
          "indexId": "5:9128231055610190580",
          "name": "profilePictureRelationId"
        }
      ],
      "relations": []
    },
    {
      "id": "6:162879391314678826",
      "lastPropertyId": "19:5998558359424914894",
      "name": "BookingItem",
      "properties": [
        {
          "id": "1:7685664473128076565",
          "name": "id"
        },
        {
          "id": "2:4691963051617887607",
          "name": "priority"
        },
        {
          "id": "3:4751608989851978419",
          "name": "date"
        },
        {
          "id": "4:4298668252649681543",
          "name": "formattedAddress"
        },
        {
          "id": "5:3557896982175720249",
          "name": "orderId"
        },
        {
          "id": "6:5444396912371992185",
          "name": "type"
        },
        {
          "id": "7:6350566628717896888",
          "name": "title"
        },
        {
          "id": "8:5815948248926709539",
          "name": "seatCount"
        },
        {
          "id": "9:1347517584208111506",
          "name": "pricePerPerson"
        },
        {
          "id": "10:161182016726729049",
          "name": "totalTax"
        },
        {
          "id": "11:2603677420345643342",
          "name": "totalAmount"
        },
        {
          "id": "12:6964519603978301018",
          "name": "time"
        },
        {
          "id": "13:6563743671015329186",
          "name": "day"
        },
        {
          "id": "14:5252213579952934956",
          "name": "redirectUrl"
        },
        {
          "id": "15:213202584538548112",
          "name": "status"
        },
        {
          "id": "16:2664627056996276806",
          "name": "experienceId"
        },
        {
          "id": "17:5051545379861430992",
          "name": "shareableUrl"
        },
        {
          "id": "18:4513563003576451503",
          "indexId": "6:4794120774209056940",
          "name": "imageId"
        },
        {
          "id": "19:5998558359424914894",
          "indexId": "7:2963448740658161805",
          "name": "feedElementToOneId"
        }
      ],
      "relations": []
    },
    {
      "id": "7:6072605387056962258",
      "lastPropertyId": "8:620926858576597520",
      "name": "Image",
      "properties": [
        {
          "id": "1:4722495423798219248",
          "name": "actualId"
        },
        {
          "id": "2:5785809790036589091",
          "name": "color"
        },
        {
          "id": "3:898405045397421733",
          "name": "id"
        },
        {
          "id": "4:5442888368829266995",
          "name": "url"
        },
        {
          "id": "5:3501485434468197765",
          "name": "url1080"
        },
        {
          "id": "6:1316954607651171513",
          "name": "url160"
        },
        {
          "id": "7:2942445530687114413",
          "name": "url360"
        },
        {
          "id": "8:620926858576597520",
          "indexId": "8:7864085141767381960",
          "name": "baseExperienceId"
        }
      ],
      "relations": []
    },
    {
      "id": "8:7509306813647547019",
      "lastPropertyId": "3:6958687385472305063",
      "name": "FeedElement",
      "properties": [
        {
          "id": "1:3560464698535580090",
          "name": "id"
        },
        {
          "id": "2:7436822921002379968",
          "name": "nextUrl"
        },
        {
          "id": "3:6958687385472305063",
          "name": "feedElementType"
        }
      ],
      "relations": []
    }
  ],
  "lastEntityId": "8:7509306813647547019",
  "lastIndexId": "8:7864085141767381960",
  "lastRelationId": "0:0",
  "lastSequenceId": "0:0",
  "modelVersion": 4,
  "modelVersionParserMinimum": 4,
  "retiredEntityUids": [],
  "retiredIndexUids": [],
  "retiredPropertyUids": [],
  "retiredRelationUids": [],
  "version": 1
}

4 个答案:

答案 0 :(得分:1)

是的。您可能在创建一次后更改了对象结构。

解决问题的最简单方法: 就像你说的,如果可能你需要删除default.json文件(在你构建项目时自动构建)。在下一个版本中,它将再次创建。

我建议您阅读objectbox文档中的Resolving Meta Model Conflicts

答案 1 :(得分:1)

如果您删除了app / objectbox-models / default.json并从Android设备上卸载了该应用程序,但问题仍然存在,请检查清单文件中的android:allowBackup="true"并将其更改为false。然后再次重复这些步骤。

这花了我一个小时的时间,希望对您有所帮助。

来源:The Nuke Option

答案 2 :(得分:0)

我的问题已经解决,问题实际上是我错误地删除了我的旧default.json文件,这是我没有必要的,最终导致重新生成所有实体的ID并导致我不匹配的UID异常。感谢Markus Junginger。

答案 3 :(得分:0)

以下是GitHub issue中所述的解决方案:

项目中两个版本的ID完全关闭:https://www.diffchecker.com/PF3UlSM7

请恢复旧版&#34; default.json&#34;文件和重建。此文件在更新时应该只有很小的差异。