Я планирую разработать новую систему с спящим режимом. Если я создаю классы гибернации с сопоставлением, например
@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. Я чувствую, что это дополнительная нагрузка на БД. их любой путь к этому эффективно?
У меня есть другой план, например, без отображения гибернации.
@Entity
@Table(name="user")
public class User{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer userid;
private String username;
private String password;
private Integer roleid;
....
}
В этом случае я могу просто добавить идентификатор в объект пользователя и сохранить его. Но классы БД не будут сопоставлены. если я сделаю это для всех классов, у меня будут таблицы БД без сопоставления внутри БД, если я сделаю это, чтобы получить имя роли, мне нужно создать другой sql, чтобы получить роль.
Таким образом, в первом подходе при сохранении объекта я получаю объект и сохраняю его, а во втором подходе мы должны создать два sql, чтобы получить два объекта. Это хороший способ реализовать это?
Какая из этих двух установок хороша, эффективна и проста в использовании? Любое обсуждение рекомендуемого способа, пожалуйста?