将外键字段添加到javabean

Adding foreign key field to a javabean

考虑这个没有 ORM 的常规 javabean/:

// primary key is auto incremented by the database, so I can't add it
public class User {
    String name;
    int personID; // foreign key
    // no args constructor
    // getter/setters for fields
}

这样做可以吗?我个人认为这没有意义,因为没有理由通过 bean 来操作外键,但我可能是错的。有没有这样的用例?

我通常会这样做。

public class Person {

    private final String id;

    public Person(String id) {
        this.id = id;
    }

    public Person() {
        this.id = UUID.randomUUID().toString();
    }

}

public class User {

    private final String id;
    private String personId;

    public User(String id, String personId) {
        this.id = id;
        this.personId = personId;
    }

    public User() {
        this.id = UUID.randomUUID().toString();
    }

    public String getPersonId() {
        return personId;
    }

    public void setPersonId(String personId) {
        this.personId = personId;
    }

}

User 的另一种选择是使其不可变。在这种情况下,它看起来像这样。

public class User {

    private final String id;
    private final String personId;

    public User(String id, String personId) {
        this.id = id;
        this.personId = personId;
    }

    public User(String personId) {
        this.personId = personId;
        this.id = UUID.randomUUID().toString();
    }

    public String getPersonId() {
        return personId;
    }

}

现在 类 可以以自动递增或非自动递增的方式使用。基本上,类 可以选择创建自己的唯一 ID 或将唯一 ID 传递给它。

我见过的一个常见困境是当 id 不存在但对象存在时。当对象在程序中创建但 ID(可能由数据库在插入时创建)尚未分配给它时就是这种情况。在那种情况下,bean 可能看起来像这样。

public class User {

    private String id;
    private final String personId;

    public User(String id, String personId) {
        this.id = id;
        this.personId = personId;
    }

    public User(String personId) {
        this.personId = personId;
    }

    public String getPersonId() {
        return personId;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

}

注意 id 不是最终的,因此对象可以在没有 id 的情况下存在,并且可以在以后需要时添加

您最好以面向对象的方式对对象及其相互关系进行建模。

public class User {
    private long id;
    private Person person;
    // .... Removed for clarity
}