Преждевременная оптимизация является первопричиной всех бед в программировании. Дональд Кнут

Какими должны быть EntityBean’ы?

Вот уже в который раз мне пришлось исправлять ранее написанные сущностные бины (в моем случае это OpenJPA) таким образом, что бы они соответствовали следующим требованиям:

  1. Каждый класс должен быть объявлен с модификатором public
  2. Каждый класс должен реализовывать интерфейс Serializable
  3. Каждый класс должен иметь публичный конструктор без аргументов
  4. Если класс является внутренним, он должен быть статическим
  5. Метод 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 ;) , о хитростях реализации которого я недавно писал в одном из моих предыдущих постов ;)

Тэги: , ,

Оставить сообщение