gpt4 book ai didi

java - ORMLite 外国 Collection

转载 作者:行者123 更新时间:2023-12-01 05:16:30 27 4
gpt4 key购买 nike

我有一个问题,我只是不知道如何解决。我想在 JAVA 中建模一个结构,例如:公司 Activity 地点

  • 每个公司都包含一个或多个位置,代表该公司的分支机构所在的位置
  • 每个事件还有一个事件发生的地点

代码如下:

public class Event {
int id;
String name;
Location location;
...
}

public class Location {
int id;
String name;
String building;
...
}

public class Company {
int id;
String name;
Collection<Location> locations;
...
}

我的问题是我想使用 ORMLite 将对象保存在数据库中。但是如果我正确理解了 ORMLite 中的外来事物,我必须向 Location 添加一个 Company 实例变量:

public class Location {
@DatabaseField(columnName = "com_id", foreign = true)
Company company;
@DatabaseField(id = true, columnName = "loc_id")
int id;
@DatabaseField(columnName = "loc_name")
String name;
@DatabaseField(columnName = "loc_build")
String building;
...
}

public class Company {
@DatabaseField(columnName = "com_id")
int id;
@DatabaseField(columnName = "com_name")
String name;
@ForeignCollectionField()
Collection<Location> locations;
...
}

但现在该位置不适用于 Activity !?!我怎样才能实现这样的行为?

谢谢您的回答

最佳答案

您需要以某种方式将位置的“所有权”分配给公司。您可以通过(至少)两种不同的方式来做到这一点。

  1. 正如您所提到的,您可以让 Location 包含 Company 字段。如果存在一对一的关系,这会很好地工作。如果您尝试拥有一个“匹兹堡” 位置,并且想要同时拥有“Alcoa”“US Steel”,则该方法不起作用“ 公司在匹兹堡设有办事处。

  2. 实现它的第二种方法是拥有一个 CompanyLocation 实体,在 ORM 语言中通常称为联接表。然而,ORMLite 不会为您制作这个连接表。

    public class CompanyLocation {
    @DatabaseField(foreign = true)
    Company company;
    @DatabaseField(foreign = true)
    Location location;
    }

    因此,如果希望“Alcoa”位置“匹兹堡”,则需要插入CompanyLocation > 进入定义关系的表。

希望这有帮助。

关于java - ORMLite 外国 Collection ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11135851/

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