奥姆莱特。如何建立两个表相关的一对一关系,如"primary key to foreign key"



我有两个表,其中一个与另一个表的关系是通过外国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

希望这有帮助。

最新更新