Я планирую создать новую систему с спящим режимом. Если я создаю Hibernate классы с отображением, напримерhibernate сопоставленные и неотображаемые классы и дизайн mysql
@Entity
@Table(name="user")
public class User{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer userid;
private String username;
private String password;
@OneToOne
private Role userrole;
.....
}
добавить роль класса
@Entity
public class Role {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String roleName;
...
}
В этом случае каждый раз, когда я добавить пользователя в базу данных я должен получить объект роли из БД и добавить к объекту пользователя и сохранить его. Если я определяю такое сопоставление с другими сложными классами проектирования, я должен получить связанные сопоставленные классы из db. Я чувствую, что это дополнительная нагрузка на db. является ли им каким-либо образом эффективным способом?
У меня есть другой план, чтобы сделать, как с картированием спящего
@Entity
@Table(name="user")
public class User{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer userid;
private String username;
private String password;
private Integer roleid;
....
}
В этом случае я могу только добавить идентификатор для объекта пользователя и сохраните его. Но классы db не будут отображаться. если я сделаю это ко всем классам, у меня будут таблицы db без отображения внутри db , если я сделаю это, чтобы получить имя роли, мне нужно создать другой sql для получения этой роли.
Итак, в первом подходе при сохранении объекта я получил объект и сохранил, а во втором подходе мы должны создать два sql для получения двух объектов. Это хороший способ его реализовать?
Из этих двух установок, которые являются хорошими, эффективными и простыми в использовании? Любое обсуждение рекомендуемого способа, пожалуйста?
просто создайте объект роли с идентификатором и установите его для пользовательского объекта. Благодарю. И пользователь имеет набор адресов и сделал его ленивым инициализацией, чтобы избежать загрузки всего адреса, когда я получаю пользовательский объект. Но если я хочу получить всех пользователей с адресом, как вы можете его получить. это может быть простой вопрос, потому что я новичок в спящем режиме? –
Если вы определяете ленивую инициализацию, адрес не будет загружаться с пользователем. Когда вы вызываете user.getAddress(), тогда адресный запрос будет запускаться в базе данных и загружать адрес с помощью таблицы пользователя. – Masudul
Благодарим вас, что этот объект пользователя должен находиться в состоянии сохранения. –