Возможно ли в Hibernate такое: При получении Entity из БД выбирать не все поля а только некоторые, чтобы снизить нагрузку на базу? Например, при логине пользователя нам не нужно "тянуть" из БД все его атрибуты, нужны поля только login и password. При редактировании профиля пользователя, конечно же, выбираем все поля таблицы users.
Возникла идея - создать в коде две сущности - одна UserSmall(id,login,password) а вторая User с полным набором полей. Но догадается ли Hibernate что это ссылки на одну и ту же таблицу и будет ли синхронизировать сущности?
Да, можно замапить 2 сущности на одну таблицу, и Hibernate догадается, что эти 2 (или более) сущности указывают на ту же таблицу. Для этого используется аннотация @Table(name = "table_name")
.
Нет, они не будут синхронизированы в том смысле, что, если одновременно активны две сущности - User
и UserSmall
- изменения из User
не попадут в UserSmall
магическим образом (нужно будет селектнуть UserSmall
после сохранения User
, чтобы получить обновленные данные).
Если попытаться сохранить запись с неполным набором полей в базу, то, генерируя запрос, в остальные, незамапленные поля, Hibernate подставит null
.
Поэтому одну из них, UserSmall
, я рекомендовал бы пометить аннотацией @Immutable
, чтобы предотвратить случайное сохранение в базу. Так как скорей всего она будет использоваться вами только для чтения.
Ещё может пригодиться аннотация @DynamicUpdate
. Она позволяет селектать и сохранять в базу неполную запись (в примере ниже см. UserUpdatable
, в к-м сохранятся изменения только в полях firstName
, lastName
).
@Entity
@Table(name = "user")
public class User {
// все поля
}
@Entity
@Table(name = "user")
@Immutable
public class UserSmall {
// id, login, password
}
@Entity
@Table(name = "user")
@DynamicUpdate
public class UserUpdatable {
// id, firstName, lastName
}
@DynamicUpdate
@Immutable
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть сервис такого типа, который запускается каждый раз при открытии приложения:
У голосового сообщения есть массив значений для визуализации, нужно сделать эту визуализациюКак это лучше сделать? Пример массива:
Можно ли как-нибудь при нажатии на кнопку, чтобы открывался в браузере файл htmlЯ закинул его в папку assets а что дальше делать не знаю