根據Spring文檔,如果您需要通過數據庫管理Spring安全性,則應該有一些標準的表格模式。例如。Spring Security + JPA用戶綱要
create table users(
username varchar(256) not null primary key,
password varchar(256) not null,
enabled boolean not null
);
create table authorities (
username varchar(256) not null,
authority varchar(256) not null,
constraint fk_authorities_users foreign key(username) references users(username)
);
create unique index ix_auth_username on authorities (username,authority);
我面臨的問題是以下。 1)無法理解如何使用JPA實現這種表格模式?
我已經嘗試過如下所示。
@Entity
@Table(name="USERS")
public class UsersPersistence extends Users implements Serializable{
private static final long serialVersionUID = 1009548075747154488L;
public UsersPersistence() {
super();
}
public UsersPersistence(long id, String userName, String password, boolean enabled) {
super(id, userName,password,enabled);
}
@Id
@GeneratedValue
@Column(name="id")
@Override
public long getId() {
return super.getId();
}
@Column(name="username", nullable=false)
@Override
public String getUserName() {
return super.getUserName();
}
@Column(name="password", nullable=false)
@Override
public String getPassword() {
return super.getPassword();
}
@Column(name="enabled", nullable=false)
@Override
public boolean isEnabled() {
return super.isEnabled();
}
}
根據Spring文檔模式中的要求創建此表。 理解問題是當我試圖在權限表中的用戶名分配一個外鍵。由於JPA通過父表的id(主鍵表)分配外鍵或者可能我不知道如何分配它。
以下是創建問題JPA類: - 創建成功
@Entity
@Table(name="AUTHORITIES")
public class AuthoritiesPersistence extends Authorities implements Serializable{
private static final long serialVersionUID = 1L;
public AuthoritiesPersistence() {
super();
}
public AuthoritiesPersistence(long id, UsersPersistence userName, String authority) {
super(id,userName,authority);
}
@Id
@GeneratedValue
@Column(name="id")
@Override
public long getId() {
return super.getId();
}
@Override
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="username", nullable=false)
public UsersPersistence getUserName() {
return (UsersPersistence) super.getUserName();
}
@Column(name="authority", nullable=false)
@Override
public String getAuthority() {
return super.getAuthority();
}
}
此表,但因爲JPA使用比實際用戶名的外鍵ID Spring Security認證是無法識別的用戶名。
任何幫助將是可觀的。我真的堅持創建一個基於用戶名而不是id的外鍵。 感謝
你不必在你的表中指定的ID。 – 2013-05-07 08:47:55
首先感謝您的快速回復@Kelvin。在這兩個表中都指定了Id。兩個持久化類都擴展了一些父類。這些類有id和持久化類,我只是重寫這些getters並將它們分配在表id列中。 – 2013-05-07 08:50:59
但ddl沒有提到id列 – 2013-05-07 09:02:47