I\xc2\xb4m 使用官方Keycloak API。我有一个 id 列表,并希望获取 id 代表的所有用户。所以让\xc2\xb4s 说我有一个包含 ids 的列表1, 7, 9。最好我希望有一个 GET 端点,它接受 ids 列表/数组作为 PathVariable。但似乎没有\xc2\xb4s这样的方法。所以我认为我要么必须为列表中的每个 id 发送单独的请求并获取相应的用户(这将导致 n 个请求,列表的大小为 n),要么我必须获取所有用户并随后过滤它们。难道就没有更好的办法了吗?
我有以下实体:
@Entity
public class A {
// id, etc..
@OneToOne
private B b;
}
Run Code Online (Sandbox Code Playgroud)
该表a已经存在,当我向其中添加新字段b时,hibernate 执行以下操作:
alter table a add column b_id int8
alter table a add constraint FKg76mxqt8whi8t8p4i7el95910 foreign key (b_id) references b
Run Code Online (Sandbox Code Playgroud)
如您所见,外键列b_id不是唯一的。为什么会这样?一对一关系不是意味着外键必须是唯一的吗?这也是我在单向一对一关系的 JPA 规范中发现的内容:
[...] 外键列与表 B 的主键类型相同,并且有一个唯一键约束。
为了使其工作,我必须明确地将@JoinColumn(unique=true)注释添加到该字段。为什么我必须明确地这样做?
我有一份员工名单。每个员工都有一个唯一的标识符id。我有一个employeeId并且必须检查由 代表的员工是否employeeid在列表中。我能想到的有两种方法,哪一种更好。有性能差异吗?
1)
if (employees.stream().map(Employee::getId).collect(Collectors.toList()).contains(employeeId)) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
2)
boolean employeeIsInsideTheList = false;
for (Employee employee : employees) {
if (employee.getId() == employeeId) {
employeeIsInsideTheList = true;
}
}
if(employeeIsInsideTheList) {
// do something
}
Run Code Online (Sandbox Code Playgroud) 我尝试向实体 Customer 添加一个新属性,该实体已将数据存储在数据库中:
private boolean isArchived;
Run Code Online (Sandbox Code Playgroud)
当我启动 spring 并尝试更新表时,这给了我以下错误:
Error executing DDL "alter table customer add column is_archived boolean not null" via JDBC Statement
Run Code Online (Sandbox Code Playgroud)
这是因为他尝试用 null 初始化isArchived已经存在的行,并且原始类型不能为 null 吗?有没有一种方法可以用 false 来初始化它们,或者我必须使用Boolean而不是boolean允许空值(我不想允许)?