hibernate映射和未映射的类和mysql设计

时间:2013-09-28 11:22:37

标签: java mysql hibernate

我打算用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来获取这两个对象。 这是实施它的好方法吗?

从这两个设置好,高效且易于使用? 有关推荐方式的讨论吗?

1 个答案:

答案 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身份验证角色和用户表应该是分开并映射的。因此,建议采用第一种方法。