我有以下表格,取自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>
知道我做错了什么吗?谢谢!
答案 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/
塞巴斯蒂安