考虑这个没有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操纵外键,但我可能错了。是否存在这样的用例?
答案 0 :(得分:0)
我通常会这样做。
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(可能由DB插入时创建)。在这种情况下,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不是final,因此对象可以在不存在id的情况下存在,并且可以在以后添加(
答案 1 :(得分:0)
最好以面向对象的方式对对象及其关系进行建模。
public class User {
private long id;
private Person person;
// .... Removed for clarity
}