Есть разные способы описать поля сущности, и так же есть определенные требования к полям.
И так если следовать правилам то, поле сущности
должно иметь область видимости 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();
}
}
Комментариев нет:
Отправить комментарий