Я нашел эту документацию о графах сущностей ... прочитав ее, я понял, что вы можете использовать графы сущностей для извлечения только подмножества @Basic
полей данной сущности.(До сих пор я использовал графы сущностей для извлечения отношений EAGERLY, т.е., например, для загрузки Employee [включая все его атрибуты] и связанного с ним Отдела [включая все его атрибуты]) ...
ИтакЯ решил попробовать это с помощью небольшого теста:
@Entity
@Table(name = "employee")
@NamedEntityGraphs({
@NamedEntityGraph(
name = "OnlyName",
attributeNodes = @NamedAttributeNode(value = "name")
)
})
public class Employee implements Serializable {
...
@Id
@Column(name = "code", updatable = false)
private Long code;
@Basic(fetch = FetchType.LAZY)
@Column(name = "name", nullable = false)
private String name;
@Basic(fetch = FetchType.LAZY)
@Column(name = "last_name", nullable = false)
private String lastName;
@Lob @Basic(fetch = FetchType.LAZY)
@Column(name = "picture", nullable = false)
private byte[] picture;
public Employee() {
super();
}
...
}
Затем, чтобы получить мою сущность, я использовал следующий код:
private Employee retrieveFromDatabase(long code) {
EntityGraph<Employee> graph; // Material Entity Graph
Map<String, Object> map = new HashMap<>();
graph = (EntityGraph<Employee>) this.em.createEntityGraph("OnlyName");
map.put("javax.persistence.fetchgraph", graph);
return this.em.find(Employee.class, code, map);
}
Теперь этот код всегда возвращает сотрудникасо всеми полями, извлеченными из базы данных;даже журналы Hibernate показывают запрос, который выбирает все поля сотрудников:
Hibernate: select employee0_.code as code1_0_0_, employee0_.last_name as last_name2_0_0_, employee0_.name as name3_0_0_, employee0_.picture as picture4_0_0_ from employee employee0_ where employee0_.code=?
)
Когда я ожидал такой запрос: select employee0_.code as code1_0_0_, mployee0_.name as name3_0_0_ from employee employee0_ where employee0_.code=?
Итак, чтоЯ делаю не так?Разве эта функция не поддерживается Hibernate ??
ПРИМЕЧАНИЕ: Для теста я использовал hibernate 5.0.10 и wildfly10 ...
Спасибо!