创建hibernate映射 - 初学者qn

时间:2012-10-06 20:03:04

标签: hibernate

我有以下表格,取自here(作为Spring Security模型的一部分):

  create table users(
      username varchar_ignorecase(50) not null primary key,
      password varchar_ignorecase(50) not null,
      enabled boolean not null);

  create table authorities (
      username varchar_ignorecase(50) not null,
      authority varchar_ignorecase(50) not null,
      constraint fk_authorities_users foreign key(username) references users(username));

  create unique index ix_auth_username on authorities (username,authority);

我对hiberanate很新,不知道如何将这些表映射到xml文件中的hibernate映射。如何映射外键?如何映射索引?我知道每个表都有一个主键,但在这种情况下,权限表并没有。那么这意味着hibernate映射中没有<id>列?

这是我到目前为止所得到的:

<class name="com.foo.beans.User" table="users">
    <id name="username" column="username"/>
    <property name="password" column="password"/>
    <property name="enabled" column="enabled"/>
</class>

<class name="com.foo.beans.Authority" table="authorities">
    <composite-id name="ix_auth_username">
        <key-property name="username" column="username" />
        <key-property name="authority" column="authority" />
    </composite-id>
</class>

知道我做错了什么吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我建议使用Annotations而不是XML。 XML有点老式。

使用Annotations看起来像这样:

@Entity
@Table(name="user_table")
public class User implements Serializable {

    Long userId;
    String username;
    String password;
    boolean enabled;

    @Id
    @Column(name="user_table_id")
    public Long getUserId() { return userId; }

    public void setUserId(Long id) { this.userId = userId; }

    @Column(name="username", length=80, nullable=true)
    public String getUsername() { return username };

    public void setUsername(String username) { this.username = username; };
    /* getters and settings annotated et cetera */
}   

权限可能是用户对象中的延迟加载列表。

因此,在用户内部,您可以定义如下内容:

List<Authority> authorities;

@OneToMany(mappedBy="userId",
               cascade=CascadeType.ALL, 
               fetch=FetchType.LAZY)
@OrderBy("xyz")
public List<Authority> getAuthorities() {
    return authorities;
}

public void setAuthorities (List<Authority> authorities) { this.authorities = authorities; };

有关更多示例和注释选项,请参阅参考指南: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/

塞巴斯蒂安