gpt4 book ai didi

java - 如何使用 ormlite 在多对多关系中检索整个数据集?

转载 作者:行者123 更新时间:2023-11-30 05:55:15 27 4
gpt4 key购买 nike

我刚开始使用 OrmLite,所以我正在使用它。我很难理解一些概念,尤其是。处理多对多关系。

这些是我的主要表格:

Pc
Name
Domain
Ethernet
IP
Gateway
Subnet
MAC

这里是确保多对多关系的那些,就像在在线示例中一样:

PcEth

我通过以下方式填充数据库:

    PC somePc = new PC("randomPc", "someDomain");
pcDao.create(somePc);

Ethernet eth1 = new Ethernet("127.255.0.1", "255.0.0.0", "192.168.1.1", "macadress");
Ethernet eth2 = new Ethernet("192.168.1.1", "255.0.0.0", "192.168.1.1", "macadress");
ethernetDao.create(eth1);
ethernetDao.create(eth2);

pcEthernetDao.create(new PcEthernet(somePc, eth1));

但我很不确定我是如何获取属于 Pc 的所有数据的。我有点期待

    PC pc = pcDao.queryForId(1);

自动检索其他表的数据。这不是 ORM 应该做的吗?有一个对象所以我不需要关心底层数据库?然而,我得到的只是 Pc.object,它只有 PC 定义的属性。 (另一方面,这并不令人惊讶,因为我只处理 pcDao。)

然而,我应该如何构建查询才能获得包含属于 PC 的所有数据的“元对象”?一个包含 PC 数据的对象,属于 Pc 的以太网设备列表(也包括它们自己的 Dns 地址列表),以及软件和操作系统列表。

我现在应该手动解决依赖关系吗?查询一台 Pc,要求 PcEthernet 表获取匹配的 ID,检索 EthernetDevice,等等?

还是有什么技巧我还没有完全掌握?

最佳答案

@Emmanuel 的回答很好,但我想我应该添加一些上下文。他说得对,您至少需要自己管理部分这种关系。

Isn't that what an ORM is supposed to do?

是的,尽管 ORMLite 一直在进行“大小与功能集”的 war 。它被设计和构建为“精简版”ORM,为此它永远不会像 Hibernate 或 iBatis 那样支持完整的 ORM 功能。

正如@Emmanuel 提到的那样,您可以使用 ORMLite 和您的数据集在您的PcEthernet 中拥有一个@ForeignCollectionField > 对象。

public class Pc {
@DatabaseField(generatedId = true)
private long id;
@ForeignCollectionField
private ForeignCollection<PcEthernet> pcEthernets;
...
}

当您检索Pc 时,一个单独的查询将填充pcEthernets。但是您随后需要自己进行查询以获取关联的 Ethernet 对象。

之前有人要求自动生成join表,自动做IN查询。如果您想概述它的工作原理或协助开发,请务必加入 ORMLite developers mailing list .

最后,在这种情况下,您真的需要多对多关系吗? Ethernet对象不是只有一个Pc对象吗?

关于java - 如何使用 ormlite 在多对多关系中检索整个数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8464871/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com