我发现了很多关于这个主题的帖子,但所有答案都只是没有示例代码的文档链接,即如何在实践中使用并发.
我的情况:我有一个实体House(用于简化)两个属性,number(id)和owner.该数据库被初始化为10 Houses以number1-10和owner永远null.
我想给房子分配一个新的所有者,目前没有所有者,而且是最小的number.我的代码看起来像这样:
@Transactional
void assignNewOwner(String newOwner) {
//this is flagged as @Transactional too
House tmp = houseDao.getHouseWithoutOwnerAndSmallestNumber();
tmp.setOwner(newOwner);
//this is flagged as @Transactional too
houseDao.update(tmp);
}
Run Code Online (Sandbox Code Playgroud)
对于我的理解,虽然@Transactional被使用,同样House可以被两次分配给不同的业主,如果两个请求获取空一样House的tmp.我如何确保不会发生这种情况?
我知道,包括选择空的更新House会解决问题,但在不久的将来,我想更多地修改/使用tmp对象.
问题:
我有一个很大的CSV文件,看起来像这样:
A B C D ...
1 dog black NULL ...
1 dog white NULL ...
1 dog black NULL ...
2 cat red NULL ...
...
Run Code Online (Sandbox Code Playgroud)
现在,我想对“分组依据”列进行分组,A并将其余各列聚合到一个用逗号分隔的列表中,而不重复。解决方案应如下所示:
A B C D ...
1 dog black, white NULL ...
2 cat red NULL ...
...
Run Code Online (Sandbox Code Playgroud)
由于CSV中的名称和列数可能会发生变化,因此我更喜欢没有硬编码名称的解决方案。
二手方法:
我pandas使用以下代码尝试了该软件包:
import pandas as pd
data = pd.read_csv("C://input.csv", sep=';')
data = data.where((pd.notnull(data)), None)
data_group = data.groupby(['A']).agg(lambda x: set(x))
data_group.to_csv("C://result.csv", sep=';')
Run Code Online (Sandbox Code Playgroud)
该set运营商不正是我想要的。但是,生成的CSV如下所示:
A B C D ... …Run Code Online (Sandbox Code Playgroud) 在 oracle 包的初始化部分,我尝试确定具有给定名称的某些对象的当前 ID。原因:该包用于多个数据库,这些对象的 ID 可能会有所不同,但它们的名称是不变的。
代码如下所示:
SELECT id INTO varCat FROM myTable WHERE Type = 'Object' AND Name = 'Cat';
SELECT id INTO varDog FROM myTable WHERE Type = 'Object' AND Name = 'Dog';
...
SELECT id INTO varMouse FROM myTable WHERE Type = 'Object' AND Name = 'Mouse';
Run Code Online (Sandbox Code Playgroud)
有没有办法优化查询,也许可以在单个查询中完成?