#java #spring #spring-boot #spring-data #hibernate-mapping
#java #spring #spring-boot #spring-данные #спящий режим-отображение
Вопрос:
Итак, у меня есть вариант использования, когда я хочу вернуть определенный атрибут для всех строк таблицы. Но атрибут не существует в таблице. Это должно быть сгенерировано на лету.
Например — Таблица с именем Student
— имеет следующий атрибут * ID * Name
Теперь, когда я использую репозиторий для этого класса модели, я хочу вернуть все строки данных, включая ID
и Name
, но также добавить другое свойство, вызываемое URL
вместе с каждой строкой. Таким образом, вывод будет —
- ID
- Имя
- URL
Данные для URL
могут быть сгенерированы «на лету» — скажем = "example.com/" ID
Как мне поступить?
Та же модель / репозиторий / класс обслуживания для этого объекта следующие —
Объект Student
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class StudentDetail {
@Id
private Long ID;
private String Name;
}
Репозиторий
@Repository
public interface StudentDetail extends JpaRepository<StudentDetail , Integer> {
}
Обслуживание
@Override
public List<StudentDetail> getStudentDetails() {
List<StudentDetail> studentDetail = studentDetailsRepository.findAll();
return studentDetail;
}
Служба вернет все строки только с атрибутом ID
и Name
. Как мне вычислить параметр URL в репозитории?
Ответ №1:
Вы можете добавить временное поле (это означает, что оно не будет сопоставлено ни с одним столбцом и сохранено):
public class StudentDetail {
@Id
private Long ID;
private String Name;
@Transient
private String url = // Here comes your implementation
}
Комментарии:
1. 1. Вернет ли вызов службы значение URL, поскольку оно не сохраняется? 2. Возможно ли переместить эту логику URL в уровень репозитория вместо самой сущности?
2. 1. Да, это будет возвращено, а не сохранено, 2. возможно, но я не уверен, как это сделать, и репозиторий предназначен не для этого, если вы действительно не хотите, чтобы это было в entity, вы могли бы сопоставить entity с DTO в
@Service
3. Итак, свойство url отображается, но оно не может добавить к нему идентификатор . URL определяется как — private String url =»example.com » ИДЕНТИФИКАТОР. Я также пробовал использовать ссылку «this». Однако идентификатор отображается как NULL
4. Возможно, вам потребуется использовать
@PostConstruct
5. Потрясающе. Спасибо. Просто примечание — Поскольку я использую @PostConstruct, мне приходится вручную определять средство получения для параметра URL и внутри него определять его значение. Преимущества lombok теряются из-за этого свойства