将外键字段添加到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
}
考虑这个没有 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
}