我有两个表,其中一个表与另一个表的关系超过外来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;
当我尝试从"患者"通过" Person",我得到一个空指针。 如果亲自更改外键列名,我会得到PSQLException,因为ResultSet不包含这样的列。
对于调试,我使用简单的主方法
public static void main(String[] args) throws SQLException {
Person p = new PersonDAO().getByUserId();
System.out.println(p.getPatient());
}
答案 0 :(得分:0)
如何建立两个相关的表的一对一关系,如“外键的主键”
1对1关系的问题在于Person
表格中有patientId
字段,而Patient
表格中有personId
字段。但只有在数据库中创建ID时才会设置ID。
这意味着您将不得不进行3次数据库操作:
Person
在数据库中创建personDao.create(...)
以获取与之关联的ID。Person
上设置Patient
,然后使用Patient
在数据库中创建patientDao.create(...)
。Patient
实体将Person
设置回患者身份,然后使用personDao.update(...)
在数据库中进行更新。其他一些事情:
dao.getByUserId()
方法的参数,因为它需要一个id才能找到有问题的那个。Patient
有一个id字段,即使你没有在帖子中显示它。Patient
中的字段应为person
,而不是personId
。 ORMLite将在该字段中存储id。 Person
中的字段正确称为patient
。希望这有帮助。