小编Ale*_*ich的帖子

在 TypeScript 中更改导入的 JSON 的类型

当在启用该选项的 TypeScript 项目中导入 JSON 文件时,resolveJsonModuleTypeScript 编译器能够自动推断导入的 JSON 文件的类型。但是,这种类型太具体了,我想用更通用的类型替换它。我尝试通过编写自定义类型定义文件来做到这一点:

// file modules.d.ts

declare module "*.json" {
  const value: Record<string, string>;
  export default value;
}
Run Code Online (Sandbox Code Playgroud)

但 TypeScript 编译器会忽略这个定义。

对我有用的唯一方法是使用临时变量,如下所示:

import DATA_JSON from "./data.json";

const DATA  = DATA_JSON as Record<string, string>; // Use my own type instead of the inferred one.

export { DATA };

Run Code Online (Sandbox Code Playgroud)

但这很无聊。有没有其他方法可以将我自己的类型赋予 TypeScript 中导入的 JSON 文件?

import json typescript

10
推荐指数
1
解决办法
2500
查看次数

使用JPA一次创建新实体或更新现有实体

A具有JPA实体,该实体具有时间戳字段并且由复杂标识符字段区分.我需要的是更新已经存储的实体中的时间戳,否则使用当前时间戳创建和存储新实体.

事实证明,任务并不像第一眼看上去那么简单.问题是在并发环境中我遇到了令人讨厌的"唯一索引或主键冲突"异常.这是我的代码:

// Load existing entity, if any.
Entity e = entityManager.find(Entity.class, id);
if (e == null) {
  // Could not find entity with the specified id in the database, so create new one.
  e = entityManager.merge(new Entity(id));
}
// Set current time...
e.setTimestamp(new Date());
// ...and finally save entity.
entityManager.flush();
Run Code Online (Sandbox Code Playgroud)

请注意,在此示例中,实体标识符不会在插入时生成,因此事先已知.

当两个或多个线程并行运行此代码块时,它们可能同时nullentityManager.find(Entity.class, id)方法调用中获取,因此它们将尝试同时保存两个或多个实体,并使用相同的标识符导致错误.

我认为解决问题的方法很少.

  1. 当然,我可以将此代码块与全局锁同步,以防止并发访问数据库,但这是最有效的方法吗?
  2. 某些数据库支持非常方便的MERGE声明,即更新现有或创建新行(如果不存在).但我怀疑OpenJPA(我选择的JPA实现)是否支持它.
  3. 事件,如果JPA不支持SQL MERGE,我总是可以回到普通的旧JDBC并对数据库做任何我想做的事情.但是我不想留下舒适的API和混乱的多毛的JDBC + SQL组合.
  4. 使用标准JPA API修复它有一个神奇的技巧,但我还不知道.

请帮忙.

jpa insert-update

9
推荐指数
1
解决办法
1万
查看次数

缓存从内存映射文件中获取的数据是否有意义?

或者再次从映射内存重新读取数据会更快,因为操作系统可能会实现自己的缓存?

事先不知道数据的性质,假设文件读取是随机的.

memory-mapped-files

5
推荐指数
1
解决办法
324
查看次数