0

ここから(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マッピングにマップする方法がわかりません。外部キーをマッピングする方法は?インデックスをマッピングする方法は?すべてのテーブルに主キーがあることは知っていますが、この場合、authoritiesテーブルにはありません。つまり<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>

私が間違っていることについて何か考えはありますか?ありがとう!

4

1 に答える 1

0

XMLの代わりにアノテーションを使用することをお勧めします。XMLは一種の古風です。

アノテーションを使用すると、次のようになります。

@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/

セバスチャン

于 2012-10-09T13:22:10.570 に答える