我有一个问题,我只是不知道如何解决它。 我想在JAVA中建模如下结构:公司,活动和地点。
以下是代码:
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中的异物,我必须将一个Company实例变量添加到Location:
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;
...
}
但现在位置不适用于活动!?!我该如何实现这样的行为?
感谢您的回答
答案 0 :(得分:0)
不知何故,您需要Location
分配Company
的“所有权”。你可以(至少)以两种不同的方式做到这一点。
如您所述,您可以Location
有一个Company
字段。如果那里有一对一的关系,这将工作正常。如果您想要一个"Pittsburgh"
Location
并且您希望"Alcoa"
和"US Steel"
公司在匹兹堡拥有一个位置,那么它将无效。
实现它的第二种方法是拥有一个CompanyLocation
实体,通常在ORM语言中称为连接表。但是,ORMLite不会为您创建此连接表。
public class CompanyLocation {
@DatabaseField(foreign = true)
Company company;
@DatabaseField(foreign = true)
Location location;
}
因此,如果希望"Alcoa"
拥有Location
"Pittsburgh"
,您需要在定义关系的表格中插入CompanyLocation
。
希望这有帮助。