1.19.2015

3. Методы доступа к полям сущности. Hibernate



Есть разные способы описать поля сущности,  и так же есть определенные требования к полям. И так если следовать правилам то, поле сущности  должно  иметь  область видимости private , protected, или package.  По умолчанию аннотации применяются  непосредственно к полям,  и такой способ называют field access.  Для примера, @Id  применено к полю Long id, в этом случае метод доступа к полю обычно совпадает с именем самого поля,  но при этом, если вам не нужен какой либо метод   для доступа к полю,  вы  можете не описывать его, смотрите листинг,  метод .getName()  закомментирован специально для демонстрации такой ситуации .  При методе доступа field access,  hibernate будет  использует рефлексию (reflection) для доступа  ко всем полям,  т.е. он не использует методы .get  и  .set сущности Person которую вы описали.

@Entity
public class Person implements Serializable {
    static final long serialVersionUID = -7593775012501239455L;
    @Id  @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    public Person() {
    }

    public Long getId() {
        return id;
    }

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

    /*public String getName() {
        return name;
    }*/

    public void setName(String name) {
        this.name = name;
    }
}  

В противоположность  методу доступа field access,  существует и  другой способ,  называемый property access,  когда аннотации применяются к методу доступа  поля,  при этом hibernate использует геттеры и сеттеры .getMyId()   и . setMyId()  сущности  Persons1 которые вы описали, к  значению поля  id,  а не рефлексию как при field access.  Иногда нужно, что бы выполнялась  какая либо  логика в методе,  допустим для примера, преобразование в верхний регистр поля name при сохранении (name.toUpperCase()), его можно заложить в метод  .setName(),   смотрите листинг.    

@Entity
public class Persons1 implements Serializable {
    static final long serialVersionUID = -7593775012501239451L;

    private Long id;
    private String name;

    public Persons1() {
    }

    @Id 
    public Long getMyId() {
        return id;
    }

    public void setMyId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }
   
   @Column()
    public void setName(String name) {
        this.name = name.toUpperCase();
    }
}

Эти два метода доступа можно комбинировать  и соединять между собой в одной сущности, т.е. к одним полям сущности применять методы доступа field access, к другим методы доступа property access .

Комментариев нет:

Отправить комментарий