Я думаю, что вам нужно вернуть объект вместо точного объекта-владельца, если вы действительно хотите это сделать.
И если вы хотите, чтобы слой БД также был эффективным, который выбирает только нужные вам свойства, вы должны создать функцию, которая принимает список, содержащий значения, которые вам нужны, и эта функция возвращает объект Object и затем отправляет его с ваш API.
Так что в вашем случае это было бы что-то вроде этого.
//DAO
public List<Object> findAll(List<String> fieldsNeeded) {
String hql = "SELECT ";
for (String field: fieldsNeeded) {
hql += field + " ";
}
hql += "FROM //your table name";
// create query and all those stuff;
// return the result
}
//controller
@GetMapping("/petclinic/owners")
public List<Object> getOwners(//your parameters) {
// (lets skip service layer)
// then you need to prepare the list of needed properties
// including checking if the properties do exsit in the table etc...
// which also returns an object;
List<String> fieldsNeeded = new ArrayList<String>();
// add all the fieldnames;
return ownerDao.findAll(fieldsNeeded);
}
Кроме того, если у вас огромная таблица с множеством свойств, вы должны изменить это "hql + = ..." с помощью функции .append () в StringBuilder, и если количество необходимых свойств слишком велико, вы вместо этого следует сказать функции не извлекать пропущенные свойства, а непропущенные.
Так что я просто узнаю, что вы на самом деле не можете вернуть объект с помощью REST.
Таким образом, в случае, если вам нужно отправить jsut один объект, я бы предложил добавить шаг внедрения в слой Service после того, как вы получили результат со слоя DAO, вы устанавливаете все поля в объекте в Entity, и он должен работать хорошо.