我打算用hibernate设计一个新系统。 如果我创建一个带有映射的hibernate类,例如
@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获取相关的映射类。我觉得这对db来说是一个额外的负担。是他们有效的方式吗?
我还有另外一个计划,就像使用hibernate映射一样
@Entity
@Table(name="user")
public class User{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer userid;
private String username;
private String password;
private Integer roleid;
....
}
在这种情况下,我可以将id添加到用户对象并保存。但db类不会被映射。如果我对所有类执行此操作,我将使用db表而不在db中进行映射 如果我这样做,以获得角色名称,我必须创建另一个SQL来获得角色。
所以在保存对象的第一种方法中我得到了对象并保存,在第二种方法中我们必须创建两个sql来获取这两个对象。 这是实施它的好方法吗?
从这两个设置好,高效且易于使用? 有关推荐方式的讨论吗?
答案 0 :(得分:1)
在这种情况下,每当我将用户添加到数据库时,我都必须这样做 从db获取角色对象并添加到用户对象并保存。如果 我将这样的映射定义为其他复杂的设计类I. 必须从db获取相关的映射类。我觉得这个 额外加载到db。是他们有效的方式吗?
此处,您未从DB加载角色对象。您应该只创建一个Role实例并将其添加到User。
Role r=new Role();
r.setName("ROLE_NAME");
user.setRole(r);
r.setUser(user);
session.saveOrUpdate(user);
session.saveOrUpdate(r);
如果您将角色与用户级联,则可以减少重复的saveOrUpdate()
操作。
从这两个设置好,高效且易于使用?任何 讨论推荐的方式吗?
通常,对于JDBC身份验证角色和用户表应该是分开并映射的。因此,建议采用第一种方法。