sim*_*bro 7 java spring spring-data-jpa spring-boot
如果这是一个显而易见的问题,请原谅我。
我的应用程序使用 LDAP 身份验证,但从其数据库加载用户权限,效果非常好。现在我尝试创建 JPA 实体来通过 REST 接口管理用户和权限。
如何使用 JPA 实现以下架构?
create table users(
username varchar(50) not null primary key,
password varchar(50) not null,
enabled boolean not null
);
create table authorities (
username varchar(50) not null,
authority varchar(50) not null,
constraint fk_authorities_users foreign key(username) references users(username)
);
create unique index ix_auth_username on authorities (username, authority)
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所创建的:
用户.java:
@Entity
@Data
@Table(name = "users", uniqueConstraints = {@UniqueConstraint(columnNames = {"username"})})
public class User {
@Id
@NotNull
@Column(length=50)
private String username;
@NotNull
private String password;
@NotNull
boolean enabled;
}
Run Code Online (Sandbox Code Playgroud)
权威.java:
@Entity
@Data
@Table(name = "authorities", uniqueConstraints = {@UniqueConstraint(columnNames = {"username"})})
public class Authority {
@Id
@NotNull
@Column(length=50)
private String username;
@NotNull
private String authority;
}
Run Code Online (Sandbox Code Playgroud)
用户存储库:
public interface UserRepository extends CrudRepository<User, Long> { }
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的话,您希望数据分布在两个表之间,其中 ID 是共享的。我认为这是@SecondaryTable注释的一个很好的用途。请参阅文档:https://docs.oracle.com/javaee/7/api/javax/persistence/SecondaryTable.html
本质上,您可以使用注释在类级别指定辅助表@SecondaryTable,然后使用 注释应转到该表的任何字段@Column(table="xxx")。在你的例子中authorities是辅助表。所以大致如下:
@Entity
@Data
@Table(name = "users", uniqueConstraints = {@UniqueConstraint(columnNames = {"username"})})
@SecondaryTables({
@SecondaryTable(name="authorities")
})
public class User {
@Id
@NotNull
@Column(length=50)
private String username;
@NotNull
private String password;
@NotNull
boolean enabled;
@NotNull
@Column(table="authorities")
private String authority;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38145 次 |
| 最近记录: |