Преждевременная оптимизация является первопричиной всех бед в программировании. Дональд Кнут
Какими должны быть EntityBean’ы?
Вот уже в который раз мне пришлось исправлять ранее написанные сущностные бины (в моем случае это OpenJPA) таким образом, что бы они соответствовали следующим требованиям:
- Каждый класс должен быть объявлен с модификатором public
- Каждый класс должен реализовывать интерфейс Serializable
- Каждый класс должен иметь публичный конструктор без аргументов
- Если класс является внутренним, он должен быть статическим
- Метод equals должен быть реализован таким образом, чтобы он обеспечивал уникальность сущности в соответствии с теми полями, которые непосредственно обеспечивают уникальность в таблице.
Рассмотрим следущую сущность в качестве шаблона
@Entity
@Table(name = "BOOKS")
public class Book implements Serializable {
private static final long serialVersionUID = -6222821312345685779L;
@Id
@Column(name = "ID")
private Integer id;
@Column(name = "NAME")
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode(){
int hash = 3;
hash = 29 * hash + (this.id != null ? this.id.hashCode() : 0);
hash = 29 * hash + (this.name != null ? this.name.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof Book))
return false;
final Book other = (Book) obj;
return (this.id == other.id || (this.id != null && this.id.equals(other.id)));
}
}
Прошу обратить Ваше внимание на то, как реализован метод equals
, о хитростях реализации которого я недавно писал в одном из моих предыдущих постов


