- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在当前正在编写的一个小应用程序中使用 Android 和 ORMLite。该应用程序的目标是具有有效的导入/导出功能,为此我使用简单的 XML 框架。在某种程度上,一切都运转良好。
情况如下:对象 A 包含引用对象 B 的外键,对象 B 通过外键本身引用对象 C。导出数据库很棒。导入工作,有一个小警告,即只要所有对象的 ID 都是连续的并且从 1 开始,它就可以工作。但是如果数据库是 fragment 化的,即我在导出数据库后到处删除了一条记录,我在生成的 XML 结构中存在“漏洞”。示例对象可以是:
@DatabaseTable("orders")
public class Order {
@DatabaseField(generatedId = true)
private int _id;
@DatabaseField(columnName="date")
private Date _date;
@DatabaseField(columnName="cost")
private double _cost;
@DatabaseField(foreign = true, columnName="customer_id")
private Customer _customer;
// ... more fields, getters and setters
}
@DatabaseTable("customers")
public class Customer {
@DatabaseField(generatedId = true);
private int _id;
@DatabaseField
private String _name;
// ... more fields, getters and setters
}
假设我有一个包含 2 个客户(id 1 和 2)的数据库,分别保存从 1 到 5 和 6 到 8 的订单。导出该数据库然后重新导入到干净的数据库中效果很好。但是,如果我删除客户 1 及其订单并将其导出,导出商将按原样写入其 ID,即
<customer id="2">...</customer>
和
<order id="6">...</order>
<order id="7">...</order>
<order id="8">...</order>
<order id="9">...</order>
等等。当我将数据导入新数据库时,我首先通过保存客户对象
custDao.create((Customer)x);
然后他们的每个订单通过
orderDao.create((Order)o);
问题是创建函数忽略了提供的 id(不是 0),而新生成的客户 id 是 1(在新的空数据库中)。订单也一样。但由于他们引用了 id=2 的客户,因此他们之间的链接被破坏了。
因此,在这个有点冗长的解释之后,我的问题是:有没有办法告诉 ORMLite 获取 generatedId 字段提供的值并使用它运行,而不是覆盖它?如果创建函数在表中找到具有相同 ID 的行时生成任何异常,我会没事的,但会继续保存记录,否则...我想到了一个解决方法:所有对象都应该可以使用 Comparator 接口(interface)按 ID 排序;使用要导入的对象对 ArrayList 进行排序;对于每个对象 - 将假定的 id 读入 int, - 使用 dao.create 保存到数据库, - 如果对象的新 id 与假定的 id 不同,则通过 dao.updateId 更改它, - 移动到列表中的下一个对象。 .但这看起来太麻烦而且容易出错:如果 create 方法尝试生成一个 id,而您刚刚使用 updateId 将其重新分配给以前的对象,该怎么办?
我不相信我的情况如此罕见,以至于没有人遇到过这种情况。我希望有一个解决方案!
最诚挚的问候,托多尔
最佳答案
ORMLite支持allowGeneratedIdInsert=true
选项 @DatabaseField
允许将 ID 已设置到生成 ID 表中的对象插入的注释。如果 ID 字段的值为空或默认值(0,...),则数据库将生成 ID。并非所有数据库类型都支持此功能(例如 Derby)。这是another discussion关于这个特定主题。
我确实认为这里正确的做法是在内存中构建对象图,关联正确的 Customer
在他们的Order
上对象在将其中一个保存到磁盘之前。如果您将客户读入内存,请读入 Order
对象并设置真实的Customer
对象对每一个。当您创建每个 Customer
时数据库中的对象,ORMLite 会更改id
字段到生成的字段,这将在 customer_id
上更改它字段保存在每个Order
中也是如此。
如果您有大量数据并且无法一次将其全部读入内存(或由于某种其他原因),那么您始终可以构建一个 Map<Integer,Integer>
并保存Customer
XML 中的 id 映射到您在数据库中创建后获得的 id。然后当您加载Order
时对象,您可以在外部对象上设置新的更正 ID。
希望这有帮助。让我了解有关如何读取对象的更多详细信息,我可以提供有关如何构建对象图的更好示例。
关于java - 我可以暂时暂停 ORMLite 中自动生成的 ID 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5216663/
我正在尝试使用以下 keytool 命令为我的应用程序生成 keystore : keytool -genkey -alias tomcat -keystore tomcat.keystore -ke
编辑:在西里尔正确解决问题后,我注意到只需将生成轴的函数放在用于生成标签的函数下面就可以解决问题。 我几乎读完了 O'Reilly 书中关于 D3.js 的教程,并在倒数第二页上制作了散点图,但是当添
虽然使用 GraphiQL 效果很好,但我的老板要求我实现一个用户界面,用户可以在其中通过 UI 元素(例如复选框、映射关系)检查呈现给他们的元素并获取数据,这样做将为该人生成 graphql 输入,
我尝试在 Netbean 6.8 中使用 ws-import 生成 Java 类。我想重新生成 jax-ws,因为在 ebay.api.paypalapi 包中发现了一个错误(我认为该错误是由于 Pa
我有一个 perl 脚本,它获取系统日期并将该日期写入文件名。 系统日期被分配给 TRH1 变量,然后它被设置为一个文件名。 $TRH1 =`date + %Y%m%d%H%M`; print "TR
我是 Haskell 的新手,需要帮助。我正在尝试构建一种必须具有某种唯一性的新数据类型,因此我决定使用 UUID 作为唯一标识符: data MyType = MyType { uuid ::
我制作了一个脚本,它可以根据 Mysql 数据库中的一些表生成 XML。 该脚本在 PHP 中运行。 public function getRawMaterials($apiKey, $format
所以这是我的项目中的一个问题。 In this task, we will use OpenSSL to generate digital signatures. Please prepare a f
我在 SAS LIFEREG 中有一个加速故障时间模型,我想绘制它。因为 SAS 在绘图方面非常糟糕,我想实际重新生成 R 中曲线的数据并将它们绘制在那里。 SAS 提出了一个尺度(在指数分布固定为
我正在为 Django 后端制作一个样板,并且我需要能够使它到达下一个下载它的人显然无法访问我的 secret key 的地方,或者拥有不同的 key 。我一直在研究一些选项,并在这个过程中进行了实验
我正在创建一个生成采购订单的应用程序。我可以根据用户输入的详细信息创建文本文件。我想生成一个看起来比普通文本文件好得多的 Excel。有没有可以在我的应用程序中使用的开源库? 最佳答案 目前还没有任何
我正在尝试使用 ScalaCheck 为 BST 创建一个 Gen,但是当我调用 .sample 方法时,它给了我 java.lang.NullPointerException。我哪里错了? seal
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我尝试编写一些代码,例如(在verilog中): parameter N = 128; if (encoder_in[0] == 1) begin 23 binary_out = 1;
我正忙于在 Grails 项目中进行从 MySQL 到 Postgres 的相当复杂的数据迁移。 我正在使用 GORM 在 PostGres 中生成模式,然后执行 MySQL -> mysqldump
如何使用纯 XSLT 生成 UUID?基本上是寻找一种使用 XSLT 创建独特序列的方法。该序列可以是任意长度。 我正在使用 XSLT 2.0。 最佳答案 这是一个good example 。基本上,
我尝试安装.app文件,但是当我安装并单击“同步”(在iTunes中)时,我开始在设备上开始安装,然后停止,这是一个问题,我不知道在哪里,但我看到了我无法解决的奇怪的事情: 最佳答案 似乎您没有在Xc
自从我生成 JavaDocs 以来已经有一段时间了,我确信这些选项在过去 10 年左右的时间里已经得到了改进。 我能否得到一些有关生成器的建议,该生成器将输出类似于 .Net 文档结构的 JavaDo
我想学习如何生成 PDF,我不想使用任何第三方工具,我想自己用代码创建它。到目前为止,我所看到的唯一示例是我通过在第 3 方 dll 上打开反射器查看的代码,以查看发生了什么。不幸的是,到目前为止我看
我正在从 Epplus 库生成 excel 条形图。 这是我成功生成的。 我的 table 是这样的 Mumbai Delhi Financial D
我是一名优秀的程序员,十分优秀!