2

我正在使用 PS 在我的应用程序中存储数据。我想我对 PS 的工作原理有误解。如果有人能告诉我如何使我从 PS 检索到的账单是未加密的,而不是我最终得到的加密账单?注意:我原来存储和未加密的账单!

据我所知,它认为两个账单和两个 PO 对象都是同一个对象!当我在 Eclispe 中查看它们的内存位置时,bill 和两个 PO 对象都具有相同的内存位置!我错过了什么?

谢谢!

    //create an unencrypted bill
    BillDAO testBill = new BillDAO();

    //store it in PS
    PersistentObject po = PersistentStore.getPersistentObject(4);
    po.setContents(testBill);
    po.forceCommit();

    //encrypt the bill
    testBill.encrypt();

    //retrieve it from PS using a different PO
    PersistentObject po2 = PersistentStore.getPersistentObject(4);
    BillDAO retrievedBill = (BillDAO) po2.getContents();

    //and now for some reason my retrieved bill is encrypted!
    //it should be unencrypted
4

1 回答 1

3

这两个对象(在 PS 和 RAM 中)是链接的,因此更改为一个会反映另一个。请参阅 Mike Kirkup在 BB 论坛上对此主题的回复,具体如下:

你应该只调用一次 setContents() 。这将在您第一次添加数据时发生。对于每个后续调用,您应该调用 getContents() 然后直接修改该对象。通过直接修改对象,您将在工作结束时调用 commit ,系统将正确提交您的更改......

此外,您可能想查看他对密钥生成的建议 :)

希望这可以帮助!

于 2010-03-25T14:04:54.007 回答