我有两个表,其中一个与另一个表的关系是通过外国ID到主id。
我有一些模型描述,在我看来看起来是正确的,但它不起作用。
第一个表
public class Person {
@DatabaseField(id = true)
private int id;
@DatabaseField(columnName = "person_id", foreign = true, foreignAutoRefresh = true)
Patient patient;
public Patient getPatient() {
return patient;
}
第二张桌子
public class Patient {
@DatabaseField(columnName = "person_id", foreign = true)
private Person personId;
当我尝试从"患者"而不是"人"查找数据时,我得到一个空指针。 如果亲自更改外键列名称,我会得到 PSQLException,因为结果集不包含这样的列。
对于调试,我使用简单的 main 方法
public static void main(String[] args) throws SQLException {
Person p = new PersonDAO().getByUserId();
System.out.println(p.getPatient());
}
表
如何建立两个相关表的一对一关系,如"主键到外键">
一对一关系的问题在于,在Person
表中有一个patientId
字段,在Patient
表中有一个personId
字段。 但是 id 只有在数据库中创建时才会设置。
这意味着您必须执行 3 个数据库操作:
- 在数据库中创建
Person
,以通过调用personDao.create(...)
获取与其关联的 ID。 - 在相应的
Patient
上设置Person
,然后使用patientDao.create(...)
在数据库中创建Patient
。 - 现在,患者具有 ID 后,将
Patient
重新设置在Person
实体上,然后在数据库中使用personDao.update(...)
更新它。
其他几件事:
- 我假设您在帖子中缺少
dao.getByUserId()
方法的参数,因为它需要一个 id 来查找有问题的特定方法。 - 我假设
Patient
有一个id字段,即使您没有在帖子中显示它。 Patient
中的字段应该只是person
,而不是personId
。 ORMLite 将在该字段中存储一个 id。Person
中的字段正确称为patient
。
希望这有帮助。